You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:40:41