在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 发送到包含

的 .php 脚本
$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中解密河豚的主要内容,如果未能解决你的问题,请参考以下文章

用 OpenSSL 替换 Mcrypt

如何在php中加密/解密数据?

在 PHP 中加密和解密许可证密钥

在PHP中解密密码[关闭]

2个比较经典的PHP加密解密函数分享

PHP如何实现AES加解密