如何解决如何在 JavaScript 中解密 Swift CryptoKit chacha20-poly1305 密码?
我使用 CryptoKit 的 ChaChapoly 快速加密了一个字符串:
// Swift
let txt: Data? = "secret message".data(using: .utf8)
let key = SymmetricKey(data: SHA256.hash(data: "password".data(using: .utf8)!))
let sealedBoxData = try! ChaChapoly.seal(txt!,using: key).combined
//return F6u88lkmmz8RrjvfJ22r4vrKmWuY8a2DNpjUKZVUi9Wp9QjZVgheBihn
sealedBoxData.base64EncodedString()
//return F6u88lkmmz8Rrjvf
sealedBox.nonce.withUnsafeBytes { return Data(Array($0)).base64EncodedString() }
//return J22r4vrKmWuY8a2DNpg=
sealedBox.ciphertext.withUnsafeBytes { return Data(Array($0)).base64EncodedString() }
//return 1CmVVIvVqfUI2VYIXgYoZw==
sealedBox.tag.withUnsafeBytes { return Data(Array($0)).base64EncodedString() }
现在我无法将加密和解密函数移植到 Javascript。
// Swift
// decrypting..
let ss = Data(base64Encoded: sealedBoxData.base64EncodedString(),options: .ignoreUnkNownCharacters)
// how to extract tag and cipher in javascript like this?
let Box = try! ChaChapoly.SealedBox(combined: ss!)
Box.tag.withUnsafeBytes { return Data(Array($0)).base64EncodedString() }
let result = try! ChaChapoly.open(Box,using: key)
// return "secret message"
let txt = String(data: result,encoding: String.Encoding.utf8)
基于sealedBoxData 的base64 字符串,我能够提取IV(随机数)和部分密文。
// React JS
function decrypt(b64SealedBoxData,key) {
// able to parse correct value
var iv = b64SealedBoxData.substring(0,16)
// last few characters parsed is incorrect
var cipher = b64SealedBoxData.substring(16)
// unable to derive from sealBoxdata string
var tag = null
}
从CryptoKit的sealedBox.ciphertext
得到的base64密文给了我J22r4vrKmWuY8a2DNpg=
,但是sealedBoxData的base64字符串只包含J22r4vrKmWuY8a2DNp
。我不知道 sealedBox.tag
是如何转化为最终的 SealBox b64 字符串的。
如何在 Javascript 中提取正确的密文和标签?如何使用 JS 以一种 swift 的 chachapoly 函数能够解密的方式加密文本?
我尝试使用这个 JS library 来加密和解密 chacha20poly1305 密码,但我无法从中得到一个有效的例子。 :(
这个 stackoverflow question 与我所面临的非常相似,除了我使用的是 chachapoly 和 JS。
感谢您的时间。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。