CryptoJS使用密码短语加密AES,但PHP解密需要密钥
CryptoJS encrypts AES with passphrase but PHP decrypt needs a key
我正在使用CryptoJS加密字符串:
function doHash(msg){
msg = String(msg);
var passphrase = 'aggourakia';
var hash = CryptoJS.AES.encrypt(msg, passphrase);
var ciphertext= hash.ciphertext.toString(); //return ciphertext instead of object
return ciphertext;
}
据我所知,CryptoJS使用密码短语生成密钥,然后用于加密数据。
然而,我想使用PHP函数解密密码,或者这样的在线工具:http://aesencryption.net/
问题是,它们需要密钥,而不是密码短语
如何直接向CryptoJS AES提供密钥,我可以在服务器端或任何在线工具上使用该密钥进行解密?
问题是,我已经很难找到PHP函数来解密AES密码了,而这个密码短语/密钥增加了的复杂性
如果您想直接提供密钥,您也应该提供IV。IV(初始化向量)是必需的,因此它可以与消息的第一个块进行异或。然后将第一块的密文与消息的第二块进行异或,依此类推。这称为密码块链(CBC)。
var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
这来自CryptoJS文档https://code.google.com/p/crypto-js/#Custom_Key_and_IV
您可以使用PBKDF2生成密钥和IV,如@Narf所写。https://code.google.com/p/crypto-js/#PBKDF2
关于PHP:mcrypt有mcrypt_RIJNDAEL_128密码,它是AES 128。MCRYPT_RIJNDAEL_192和MCRYPT_ RIJNDAEL_256与AES 192和AES 256不兼容,因为AES使用具有所有密钥大小的128位块。Rijndael有一个可配置的块大小。如果您提供128位密钥,CryptoJS将使用128位AES,如果您使用接受密码短语的函数,它将使用256位。
相关文章:
- 使用 SJCL 在 Javascript 中加密,在 PHP 中解密
- 用JavaScript加密字符串,用RSA技术用PHP解密
- 与PHP解密相匹配的Javascript加密
- 用PHP mcrypt加密的Javascript解密Blowfish CBC
- Node.js对外部PHP aes-256-cbc进行解密,然后对其进行加密
- javascript->php加密解密-需要澄清和方法请
- 在 PHP 中加密字符串,在 Node.js 中解密
- RSA加密:在PHP中创建密文,并在Javascript中解密
- PHP中的加密和node.js中的解密
- 如何使用PHP mcrypt加密和使用节点加密解密
- CryptoJS使用密码短语加密AES,但PHP解密需要密钥
- PHP加密和CryptoJS解密
- JavaScript中的三重DES加密和PHP中的解密
- 在php中解密河豚
- 可以't使用gnupg(Ubuntu GPG通过PHP)解密openpgpjs(JS)加密的pgp消息
- 在ajax请求中加密密码,并在laravel控制器(.php)中解密
- 用PHP加密消息,用JavaScript解密
- 是否可以用Php加密JWT令牌并用Javascript解密
- 使用CryptoJS加密和使用php解密:IV. js的用途是什么?
- SSL替代-用JavaScript加密密码,提交给PHP解密