Encryption cryptojs:如何生成AES密码短语

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

我想为我的AES加密生成一个256bit密码。当我在加密后检查密码时,它与我的初始密码不同。我做错了什么?还是有我不知道的安全机制

我的代码:

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 });