用PHP加密解密加密AES加密AES加密 [英] Decrypting AES with Javascript CryptoJS after encrypting with PHP mcrypt

查看:205
本文介绍了用PHP加密解密加密AES加密AES加密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用mcrypt加密PHP

 <?php 
$ string = 秘密消息;
$ key ='d4b494e4502a62edd695a903a94c2701';
$ iv ='02f30dffbb0d084755f438f7d8be4a7d';

$ encrypted = base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$ key,
$ string,
MCRYPT_MODE_CBC,
$ iv

);
// $加密结果'nYoFAiyDARVSI09lH / IPdim5TvE51izVjk6sc2AK9Rg ='
?>

使用CryptoJS解压缩JavaScript

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

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

console.log(decryptpted.toString(CryptoJS.enc.Utf8)); //打印一个空字符串
< / script>

我不知道如何让Javascript一边吐出原文

解决方案

SOLVED



注意:我发现在PHP的mcrypt中的MCRYPT_RIJNDAEL_256不包括在AES中。它使用Rijndael方法,BUT具有256位块大小(AES中不包括)。因此,CryptoJS不处理Rijndael的256位块大小。谢谢,GregS



尽管如此,我发现一个成功解密我从运行我的PHP mcrypt函数获取的密文的实现,使用MCRYPT_RIJNDAEL_256(Rijndael,256位块大小,256位密钥/ 32字节密钥)。



这里是:
< a href =https://code.google.com/p/js-mcrypt/ =noreferrer> https://code.google.com/p/js-mcrypt/

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

我希望这有助于我花了一个星期的业余时间试图弄清楚这一点,几乎放弃。


Encrypting in PHP with 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='
?>

Decrypting in Javascript with CryptoJS

<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>

I can't figure out how to get the Javascript side to spit out the original text.

解决方案

SOLVED

Note: I found out that "MCRYPT_RIJNDAEL_256" in PHP's mcrypt is NOT included in AES. It uses the Rijndael method, BUT with a 256-bit block size (not included in AES). So, CryptoJS does not handle 256-bit block sizes for Rijndael. Thanks, GregS

Nonetheless, I found an implementation that successfully decrypted the ciphertext I get from running my PHP mcrypt function above, using MCRYPT_RIJNDAEL_256 (Rijndael, 256-bit block size, with 256-bit key/32-byte key).

Here it is: 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>

I hope this helps someone as I spent a week of my spare time trying to figure this out and almost giving up.

这篇关于用PHP加密解密加密AES加密AES加密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆