php RSA-Web应用程序(JavaScript)和iOS应用程序(Swift)中的加密和解密

5n0oy7gb  于 2023-01-04  发布在  PHP
关注(0)|答案(1)|浏览(84)

我正在构建一个webapp(JavaScript)和一个iOS-app(Swift),问题是iOS-app和webapp都应该创建公钥和私钥并交换它们。
我尝试使用JSEncrypt(https://github.com/travist/jsencrypt)作为Web部分,使用CryptorRSA作为移动部分。
在JSEncrypt中创建公钥时,我得到了如下内容:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68ROkNzyo01gJCvo94mI/SswF
2FWDk4nvjbkcFeDWUZFd8t/2whnNJv9Nj+Y0VO2LSu5fVm6FIuGiesz1EzaBNkIL
kfphsSJjE8GGRqHYgdUgidv1mgkF+86Uk7hDDYtv4gUTLALXdHwDpsu28ww57ISA
Gxxidh7oyR74+cq46wIDAQAB
-----END PUBLIC KEY-----

然后我尝试使用CryptorRSA加密它:

let key = try? CryptorRSA.createPublicKey(withPEM: """
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68ROkNzyo01gJCvo94mI/SswF
2FWDk4nvjbkcFeDWUZFd8t/2whnNJv9Nj+Y0VO2LSu5fVm6FIuGiesz1EzaBNkIL
kfphsSJjE8GGRqHYgdUgidv1mgkF+86Uk7hDDYtv4gUTLALXdHwDpsu28ww57ISA
Gxxidh7oyR74+cq46wIDAQAB
-----END PUBLIC KEY-----
""")


  if let k = key {
        print("1");
        if let text = try? CryptorRSA.createPlaintext(with: "hallo Welt!", using: String.Encoding.utf8) {
            print("2");
            let encryptedData = try? text.encrypted(with: k, algorithm: .sha1)
            print(encryptedData)
            if let d = encryptedData {
                print(try? d.base64String)
            }
        }

    }

该函数返回:

chvRmbYpzNFVL5HPW9JP3BrkonSbcmObdfKteXfCr9Yw3Gycr4irqEjxroBFKli+lVF89lWaxTRCy2prn7Athbi7EGdG5y6dITyFWGf/p91NAAbWdQlz+AOsWb6lPs3MfBqHnqG2O1vDrh5yEGImM+40QvZB9yMLGTA1Y2LPRe157ymFOp3C4aW7/+we9a7aQiCw6QavcsUvdhg=

但是当我尝试在JSEncrypt**中解密它时,它只会导致一个错误。

46scxncf

46scxncf1#

这个问题的一个间接解决方案是使用一个库,这个库是为了在不同的平台上“容易地”使用加密而设计的。
我最终决定使用sodium/libsodium/nacl跨许多平台进行对称和非对称加密。

相关问题