在php中解密河豚
Posted
技术标签:
【中文标题】在php中解密河豚【英文标题】:Decrypt blowfish in php 【发布时间】:2016-02-29 10:22:28 【问题描述】:我在客户端使用blowfish.js
。
要在客户端加密,我使用
var encryptedData = blowfish.encrypt(
JSON.stringify(myData), myEncryptionKey, cipherMode: 0, outputType: 0
);
这样encryptedData
是Base64 编码的河豚字符串。没关系好的。
在我使用的客户端解密
var decryptedData = blowfish.decrypt(
encryptedData , myEncryptionKey, cipherMode: 0, outputType: 0
);
所以decryptedData
等于JSON.stringify(myData)
。没关系好的。
然后我将我的encryptedData
发送到包含
$data = $_POST['data'];
$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $myEncryptionKey, pack('H*',$data), MCRYPT_MODE_ECB);
当我尝试打印 $data 时,我得到了一些不可读的东西,例如
�Nv��Xd�̿�:q6��A����,!v��c�O¡1�%>��ҭ� 0�� � ���g�u�����t�z3q$����T��/Ҧ.j-�/!���;�lS���Z�X
��&����j�m�����F�`7��.......and so on
它不行。 有谁知道我在服务器端做错了什么?
【问题讨论】:
为什么pack('H*',$data)
正如你所写的data
是一个base64编码的字符串,只是base64_decode
数据并将其传递给解密函数
已经尝试不使用 pack 并且仍然得到不可读的字符串
您是否验证了base64
在php中解码加密字符串后与客户端相同?
是的,我比较了javascript中的encryptedData等于php中的$_POST['data'];
ins0 谢谢。在用河豚解密之前,我忘记制作 base64_decode 了。像往常一样啊
【参考方案1】:
为什么你在写数据时pack('H*',$data)
是一个base64
编码字符串。只需base64_decode
数据并将其传递给解密函数。
$data = $_POST['data'];
$decryptedData = base64_decode($data);
$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $myEncryptionKey, $decryptedData, MCRYPT_MODE_ECB);
【讨论】:
以上是关于在php中解密河豚的主要内容,如果未能解决你的问题,请参考以下文章