我的服务器是Python,客户端是Swift。我正在使用cryptography
包用于Python,SwCrypt
用于Swift。
iOS会创建一个随机AES密钥并使用公钥加密
let publicKeyDER = try SwKeyConvert.PublicKey.pemToPKCS1DER(publicPemReceivedFromServer)
let msg = "this_is_thirty_two_character_lon".data(using: .ascii)!
let random_aes_cypher = try CC.crypt(.encrypt, blockMode: .cbc, algorithm: .aes, padding: .pkcs7Padding, data: msg, key: CC.generateRandom(32), iv: CC.generateRandom(16))
iOS将加密的AES密钥发送回服务器
let x = try CC.RSA.encrypt(random_aes_cypher, derKey: publicKeyDER, tag: Data(), padding: .oaep, digest: .sha1)
//Post x to server
服务器使用私钥解密加密的AES密钥 private_key.decrypt(encrypted_aes_key,oaep_padding)
在最后一步,解密的消息包含非常奇怪的字符。任何想法为什么?它在PyCharm上看起来像这样:\ < >Ddždž䥋wp+6' W= $ O rܨosf .C qKT=_ { B pE #-mntY ^ 0L9f @ = O * \的Bz;“0K&安培; Z, J□\→
当我在解密的消息上调用len()
时,我看到我得到了正确的字符数(在这种情况下为32),但字母很奇怪,如上所示。