Home Backend Development PHP Tutorial Blowfish加密,诀别使用PHP和C++实现,但结果不同.

Blowfish加密,诀别使用PHP和C++实现,但结果不同.

Jun 13, 2016 am 10:51 AM
mcrypt quot text

Blowfish加密,分别使用PHP和C++实现,但结果不同...
先是MD5实验,结果相同,但使用Blowfish实验,怎么做也成功不了
调用如下:

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php $cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_ECB, '');    $iv   = '00000000';    $key  = "strkey11";    $stext = '38A0E9312DDA8F7C16B9A12159168C76';    $stext = md5($stext, true);    //经过调试知道,在这时$stext的值与C++中MD5后的结果一致    if (mcrypt_generic_init($cipher, $key, $iv) != -1)    {        $dtext = mcrypt_generic($cipher,$stext );        mcrypt_generic_deinit($cipher);        // Display the result in hex.        printf("blowfish encrypted:<br>%s<br><br>",strtoupper(bin2hex($dtext)));    }    mcrypt_module_close($cipher);
Copy after login

C++的是这样:
C/C++ code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    MD5_CTX md5;    unsigned char str[16];    md5.MD5String(strSource.c_str() ,str);    BlockCipher *bf;    char key[] = "strkey11";              //Key    bf = new BlowFish();    bf->setKey((void *)key, 8*8);    bf->encrypt((void *)str, 8);      //unsigned char str[16];    bf->encrypt((void *)(str+8), 8);    char temp1[4] = {0};    char buff1[128] = {0};    for(int i = 0;i
Copy after login


------解决方案--------------------
$iv = '00000000'; ???
按 bf->setKey((void *)key, 8*8); 理解
应该是
$iv = "\x00\x00\x00\x00\x00\x00\x00\x00";
吧?

------解决方案--------------------
IV is ignored in ECB. IV MUST exist in CFB, CBC, STREAM, nOFB and OFB modes.
MCRYPT_MODE_ECB的模式,$iv是忽略的,应该不是这个问题。

好像是加密之前要padding,你试试看
$size = mcrypt_get_block_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$input = pkcs5_pad($input, $size); 

function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}

function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
------解决方案--------------------
c++的结果是不是有问题,这里有个在线blowfish加密的,你可以验证一下
http://webnet77.com/cgi-bin/helpers/blowfish.pl
------解决方案--------------------

首先你要弄清楚到底是PHP错了还是C++错了,我之前用bin2hex确实不对,但是md5之后是二进制数据没法验证,
你能不能不要用md5直接字符abcdefgh, 加密后是什么?

网页结果是
明文 abcdefgh
密文 5B4148819C51DCB5
------解决方案--------------------
我用了PHP的在线解码
http://www.tools4noobs.com/online_tools/decrypt/

5B4148819C51DCB5能解密出来,但是12DB6214F5EAB031解不出来

是不是C++程序有什么不一样?只要能加密解密不能算错,但是要互相能解密加密就必须遵循一样的算法。

同样的对称算法,同样的key,不大可能密文是不一样的,除了有些随机干扰。但是从blowfish的算法看,
并没有随机干扰,是不是有可能是pbox,sbox定义的不一样?
------解决方案--------------------
关于C++代码,有两个问题你可以确认一下
1)bf->setKey((void *)key, 8*8); 第二个参数应该是key的长度,为什么是8*8?
2)PHP有设置ECB模式,但是c++里没有,是不是缺省就是ECB?
------解决方案--------------------
我找到原因了,你的算法跟PHP的blowfish算法不一样,c++的算法是blowfish-compat

所以改成$cipher = mcrypt_module_open('blowfish-compat', '', MCRYPT_MODE_ECB, '');
这样就应该可以了。
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to replace mcrypt in php How to replace mcrypt in php Oct 31, 2022 am 09:46 AM

How to replace mcrypt with php: 1. Open the corresponding php file; 2. Find the original encryption and decryption code; 3. Use the "openssl_encrypt" and "openssl_decrypt" methods to replace it.

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Complete tutorial: How to encrypt and decrypt using php extension MCrypt Complete tutorial: How to encrypt and decrypt using php extension MCrypt Jul 28, 2023 pm 12:25 PM

Complete tutorial: How to use PHP extension MCrypt for encryption and decryption Introduction In modern network applications, data confidentiality and security are particularly important. In order to ensure the security of data transmission and storage, encryption technology has become an essential tool. In PHP, the MCrypt extension provides an easy way to encrypt and decrypt data. This tutorial will show you how to encrypt and decrypt using the PHP extension MCrypt. Step 1: Install MCrypt extension MCrypt extension is a tool for encrypting and decrypting data

Detailed tutorial on Apache optimization and hotlink prevention in Linux system Detailed tutorial on Apache optimization and hotlink prevention in Linux system Feb 20, 2024 am 09:00 AM

The following is a detailed tutorial on Apache optimization and anti-hotlinking under Linux systems: Apache performance optimization: Enable compression: Enable Gzip compression in the Apache configuration file to reduce the size of transmitted data. LoadModuledeflate_modulemodules/mod_deflate.soAddOutputFilterByTypeDEFLATEtext/htmltext/plaintext/xmltext/cssapplication/javascript

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 Jun 13, 2016 am 10:15 AM

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。

为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 Jun 13, 2016 am 10:24 AM

为什么我在php上写的这个代码,在浏览器上什么都不显示啊

图片消失怎么解决 图片消失怎么解决 Apr 07, 2024 pm 03:02 PM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

图片消失怎么解决 图片消失怎么解决 Jun 13, 2016 am 10:09 AM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

See all articles