我在Objective中成功地使用了RNCryptor,现在需要从Javascript为我的iOS应用程序加密数据。但是这个简单的测试失败了..。
<script type="text/javascript" src="js/utils/sjcl.js"></script>
<script type="text/javascript" src="js/utils/rncryptor.js"></script>
function testEncodeEncrypt_RN(plaintext) {
var secret = "rosebud";
var encrypted = RNCryptor.Encrypt(secret, plaintext);
var decrypted = RNCryptor.Decrypt(secret, encrypted);
console.log("decrypted to " + decrypted);
}...with由sjcl.js引发的错误"Uncaught : pkcs#5填充损坏“。
我尝试过各种选项对象,但我认为任何选项都不应该同时适用于加密和解密。更改输入字符串和秘密也没有好处。有什么想法吗?
发布于 2015-06-30 13:10:11
/*
Takes password string and plaintext bitArray
options:
iv
encryption_salt
html_salt
Returns ciphertext bitArray
*/
RNCryptor.Encrypt = function(password, plaintext, options) {plaintext是bitArray吗?如果要传递UTF-8字符串,则需要使用sjcl.codec.utf8String.toBits进行转换。还有十六进制和base64编码的编解码器。请参阅SJCL文档。
SJCL的最新版本将接受字符串并将它们自动转换为bitArrays,但在我完成v4格式的工作之前,我可能不会再次接触JS实现(应该在2015年底之前)。我很乐意接受拉的请求。
请注意,RNCryptor-js并不完全兼容任何其他实现(包括ObjC实现)。JavaScript太慢,无法处理v3格式所需的10,000个PBKDF2迭代,因此它默认使用1,000次。这意味着您必须修改另一端的代码才能匹配(或者将JS配置为使用10,000,000,但处理密码需要10倍的时间)。查找RNCryptor.h中的两个RNCryptor.h配置设置。
v4格式的主要目标之一是使迭代计数可配置,使JavaScript能够互操作(不幸的是,它大大降低了加密的安全性,但这是JavaScript今天所能处理的)。
https://stackoverflow.com/questions/31127957
复制相似问题