【问题标题】:Decrypting AES with Javascript CryptoJS after encrypting with PHP mcrypt使用 PHP mcrypt 加密后使用 Javascript CryptoJS 解密 AES
【发布时间】:2014-12-24 18:27:05
【问题描述】:

在 PHP 中使用 mcrypt 加密

<?php
$string = 'Secret Message';
$key = 'd4b494e4502a62edd695a903a94c2701';
$iv = '02f30dffbb0d084755f438f7d8be4a7d';

$encrypted = base64_encode(
    mcrypt_encrypt(
        MCRYPT_RIJNDAEL_256,
        $key,
        $string,
        MCRYPT_MODE_CBC,
        $iv
    )
);
//$encrypted results in 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg='
?>

使用 CryptoJS 在 Javascript 中解密

<script>
var encrypted = 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg=';
var key = CryptoJS.enc.Hex.parse('d4b494e4502a62edd695a903a94c2701');
var iv = CryptoJS.enc.Hex.parse('02f30dffbb0d084755f438f7d8be4a7d');

var decrypted = CryptoJS.AES.decrypt(encrypted,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});

console.log(decrypted.toString(CryptoJS.enc.Utf8)); //prints an empty string
</script>

我不知道如何让 Javascript 端吐出原文。

【问题讨论】:

  • MCRYPT_RIJNDAEL_256 不是 AES; MCRYPT_RIJNDAEL_128 是。
  • 谢谢,但是有没有办法在 javascript 中用 256 位块解密 RIJNDAEL 密码?
  • 当然,找到一个 Rijndael javascript 实现。
  • 谢谢。另外,当我将 php 中的块大小更改为 MCRYPT_RIJNDAEL_256 时,它仍然不起作用...
  • 您的意思是上一条评论中的 MCRYPT_RIJNDAEL_128 吗?无论如何,mcrypt_encrypt 使用的填充与其他所有内容都不兼容,尤其是 Javascript 使用的 PKCS7 填充。请参阅 owlstead 的 answer in this question 了解更多信息。

标签: javascript encryption aes mcrypt cryptojs


【解决方案1】:

已解决

注意:我发现 PHP 的 mcrypt 中的“MCRYPT_RIJNDAEL_256”不包含在 AES 中。它使用 Rijndael 方法,但块大小为 256 位(不包括在 AES 中)。因此,CryptoJS 不处理 Rijndael 的 256 位块大小。谢谢,格雷格

尽管如此,我找到了一个实现,它使用 MCRYPT_RIJNDAEL_256(Rijndael,256 位块大小,256 位密钥/32-字节键)。

这里是: https://code.google.com/p/js-mcrypt/

<script>
var encrypted = 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg=';
var key = 'd4b494e4502a62edd695a903a94c2701';
var iv = '02f30dffbb0d084755f438f7d8be4a7d';
var decrypted = mcrypt.Decrypt(atob(encrypted), iv, key, 'rijndael-256', 'cbc');
</script>

我希望这对某人有所帮助,因为我花了一周的空闲时间试图解决这个问题并几乎放弃了。

【讨论】:

  • 它对我很有效。但解密后我得到了额外的空间。你能帮我解决这个问题吗?
  • 只使用decrypted.replace(/\0/g, 'your replacement text');
猜你喜欢
  • 2012-08-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2014-12-16
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多