【问题标题】:AES encryption using CryptoSwift and CryptoJS使用 CryptoSwift 和 CryptoJS 的 AES 加密
【发布时间】:2018-10-13 18:58:14
【问题描述】:

我尝试使用 CryptoSwift 加密文本,用于 ios 应用程序和 CryptoJS 用于 Web 应用程序,必须在 Java 平台上解密。我可以使用以下代码在 javascript 中成功加密。

var message = "Hello"
var password = "samplepasswordky"

function encrypt(message, password) {
  var salt = CryptoJS.enc.Hex.parse("00000000000000000000000000000000");
  var key = CryptoJS.PBKDF2(pass, salt, {
    keySize: keySize/32,
    iterations: iterations
  });

  var iv = CryptoJS.enc.Hex.parse("00000000000000000000000000000000");
  var encrypted = CryptoJS.AES.encrypt(msg, key, {
    iv: iv
  });
  var encryptedMessage = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
  return encryptedMessage;
}

对于 CryptoSwift 中的相同,我正在执行以下操作,但我无法解密 Java 中的文本。

let salt: [UInt8] = Array("0000000000000000".utf8)
let password: [UInt8] = Array("samplepasswordky".utf8)
let iv: [UInt8] = Array("0000000000000000".utf8)
let derivedKey = try! PKCS5.PBKDF2(password: password, salt: salt , iterations: 100, keyLength: 16, variant: .sha1).calculate()
let encrypted = try! AES(key: derivedKey, blockMode: CBC(iv: iv), padding: .pkcs5).encrypt(input)
print(encrypted.toHexString())

请帮助我完成这项工作。

【问题讨论】:

    标签: swift encryption cryptojs cryptoswift


    【解决方案1】:

    这一行:

    var salt = CryptoJS.enc.Hex.parse("00000000000000000000000000000000");
    

    和这一行不一样:

    let salt: [UInt8] = Array("0000000000000000".utf8)
    

    “0000000000000000”的utf8编码,十六进制为30303030303030303030303030303030(0x30是字符“0”的UTF-8编码)。

    您在这里使用的是Array(repeating: UInt8(0), count: 16)

    你也在 JavaScript 中输出一个 Base64 字符串,在 Swift 中输出一个十六进制字符串,它们不是一回事。

    不相关的旁注:

    这个实现非常努力地获得了很少的安全性。如果您的密码是静态的,您可以使用随机密钥(即 32 个完全随机的字节 0-255,而不是字符串)做得更好。 PKBDF2 在这里并没有真正给你带来太多好处,除了减慢系统速度(不是减慢攻击者的速度;只是你的应用程序)。添加随机 IV 也会显着改善这个系统,而且成本很低。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 2014-08-17
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多