如何用AES解密服务器返回的加密PDF页面密码?
AES解密失败的常见排查点(基于CryptoSwift)
确认加密数据的编码格式
直接使用myEncryptedData.bytes处理加密字符串大概率存在问题。服务器返回的加密内容通常是Base64编码格式,而非原始UTF8字节流。需要先将Base64字符串转换为Data,再提取字节数组:guard let encryptedData = Data(base64Encoded: myEncryptedData) else { print("加密字符串不是有效的Base64格式") return } let ciphertext = try aes.decrypt(encryptedData.bytes)验证密钥和IV的正确性
- 确保
key32符合对应AES标准的长度(AES-256需32字节,AES-128需16字节)。如果密钥是Base64编码的,必须先解码为Data再转换为字节数组,不能直接取UTF8字节:guard let keyData = Data(base64Encoded: key32), keyData.count == 32 else { print("密钥格式错误或长度不符合AES-256要求") return } let aes = try AES(key: keyData.bytes, blockMode: CBC(iv: ivBytes), padding: .pkcs7) - IV同理,若为Base64编码,需先解码再使用,直接取UTF8字节会导致长度或内容不符。
- 确保
核对加密模式与填充方式
必须确保服务器端使用的加密模式(如CBC)、填充方式(如PKCS7)与代码配置完全一致,哪怕细微差异(比如服务器用PKCS5填充、ECB模式)都会导致解密失败。利用异常信息定位问题
代码中已打印error,但未提供具体错误内容。如果是invalidKeySize,说明密钥长度不匹配;如果是corruptedData,则大概率是加密数据解码错误或IV/密钥不匹配,优先查看错误信息能快速缩小排查范围。
内容的提问来源于stack exchange,提问作者Mahmut YAZAR
相关产品推荐
相关产品推荐

