Encryption cryptojs:如何生成AES密码短语
我想为我的AES加密生成一个256bit密码。当我在加密后检查密码时,它与我的初始密码不同。我做错了什么?还是有我不知道的安全机制 我的代码:Encryption cryptojs:如何生成AES密码短语,encryption,passwords,aes,cryptojs,Encryption,Passwords,Aes,Cryptojs,我想为我的AES加密生成一个256bit密码。当我在加密后检查密码时,它与我的初始密码不同。我做错了什么?还是有我不知道的安全机制 我的代码: password=Generate_key(); var encrypted = CryptoJS.AES.encrypt("Message", password); //Those two should be the same document.write(password+"<br>"); document.write(encrypt
password=Generate_key();
var encrypted = CryptoJS.AES.encrypt("Message", password);
//Those two should be the same
document.write(password+"<br>");
document.write(encrypted.key);
function Generate_key() {
var key = "";
var hex = "0123456789abcdef";
for (i = 0; i < 64; i++) {
key += hex.charAt(Math.floor(Math.random() * 16));
//Initially this was charAt(chance.integer({min: 0, max: 15}));
}
return key;
}
password=Generate_key();
var encrypted=CryptoJS.AES.encrypt(“消息”,密码);
//这两个应该是一样的
文件。写入(密码+“
”);
文件。写入(加密的。密钥);
函数生成_键(){
var key=“”;
var hex=“0123456789abcdef”;
对于(i=0;i<64;i++){
key+=hex.charAt(Math.floor(Math.random()*16));
//最初这是charAt(chance.integer({min:0,max:15}));
}
返回键;
}
输出为
0B05308C9A000F07044416BAD7A51BACD282C5C0C999551A4FF15C302B268B20
4DF87599377044FB35953166EE7833C32CA0741E9FEC091DFA10138039E8
这是正常的还是我做错了什么?
谢谢你的帮助 加密是用一个密钥完成的,密钥是一组二进制位,而不是密码,密码意味着一个人类可读的字符串 要从密码转换为密钥,可以使用基于密码的密钥派生函数,如PBKDF2。Crypto JS已经有一个
var salt=CryptoJS.lib.WordArray.random(128/8);
var key128Bits=CryptoJS.PBKDF2(“秘密密码”,salt,{keySize:128/32});
var key256Bits=CryptoJS.PBKDF2(“秘密密码”,salt,{keySize:256/32});
var key512Bits=CryptoJS.PBKDF2(“秘密密码”,salt,{keySize:512/32});
var key512Bits1000Iterations=CryptoJS.PBKDF2(“秘密密码短语”,salt,{keySize:512/32,iterations:1000});
通常,使用尽可能高的迭代次数
Salt应该是一个随机值,如上例所示;当然,您需要将该值与迭代计数一起存储,以便在给定相同密码短语的情况下获得相同的密钥。我找到了解决方案。您可以使用 var encrypted=CryptoJS.AES.encrypt(“消息”,密钥,{iv:iv})强> 所以我的源代码是:
key=CryptoJS.enc.Hex.parse(Generate_key());
iv=CryptoJS.enc.Hex.parse(Generate_key());
var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
Math.floor(Math.random()*16)
不等同于chance.integer({min:0,max:15})
。你应该试试Math.round(Math.random()*15)
如果我根本不需要密码怎么办?我只想生成密钥并将其保存在某个地方。或者解决方案是使用my generate_key()生成密码短语,将其解析为密钥,然后使用aes加密?然后使用与生成salt和IV相同的技术生成密钥,即加密随机库。在本例中,您将对key和IV使用CryptoJS.lib.WordArray.random。哇,CryptoJS开发人员在32位字中指定PBKDF2
密钥大小是多么令人抓狂!链接断了!您是如何生成密钥的?在问题中
key=CryptoJS.enc.Hex.parse(Generate_key());
iv=CryptoJS.enc.Hex.parse(Generate_key());
var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });