首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于CryptoSwift和CryptoJS的AES加密

基于CryptoSwift和CryptoJS的AES加密
EN

Stack Overflow用户
提问于 2018-10-13 18:58:14
回答 1查看 1.1K关注 0票数 0

我试着用CryptoSwift对ios应用程序加密文本,对web应用程序使用CryptoJS加密,这需要在Java中解密。我可以使用以下代码在javascript中成功加密。

代码语言: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解密文本。

代码语言:javascript
复制
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())

请帮我把这件事做好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-13 19:10:45

这一行:

代码语言:javascript
复制
var salt = CryptoJS.enc.Hex.parse("00000000000000000000000000000000");

与这一行不一样:

代码语言:javascript
复制
let salt: [UInt8] = Array("0000000000000000".utf8)

在十六进制中,"0000000000000000“的utf8编码是3030303030303030303030303030 (0x30是字符”0“的UTF-8编码)。

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

您还将在JavaScript中输出一个JavaScript字符串,在Swift中输出一个十六进制字符串,这是不一样的。

无关的边注:

这个实现非常努力地获得很少的安全性。如果您的密码是静态的,则可以通过使用随机键(即32个完全随机的字节0-255,而不是字符串)来做得更好。PKBDF2在这里并不买账,只是减慢了系统的速度(不是降低攻击者的速度;只是你的应用程序)。添加一个随机IV将显着改善这一系统,以及以很少的成本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52796267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档