我正在构建一个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**中解密它时,它只会导致一个错误。
1条答案
按热度按时间46scxncf1#
这个问题的一个间接解决方案是使用一个库,这个库是为了在不同的平台上“容易地”使用加密而设计的。
我最终决定使用sodium/libsodium/nacl跨许多平台进行对称和非对称加密。