Openfire使用blowfish加密算法将密码存储在数据库中。 http://svn.igniterealtime.org/svn/repos/openfire/trunk/src/java/org/jivesoftware/util/Blowfish.java 是openfire中加密/解密函数的java实现。
我的目标是通过PHP和MySQLI在数据库中创建新用户条目。 所有我尝试过的变化都没有产生与数据库中已有内容匹配的结果。 例如:
d3f499857b40ac45c41828ccaa5ee1f90b19ca4e0560d1e2dcf4a305f219a4a2342aa7364e9950db
是其中一个加密密码。明文为stackoverflow
我尝试了一些变化:
echo mcrypt_cbc(MCRYPT_BLOWFISH, '1uY40SR771HkdDG', 'stackoverflow', MCRYPT_ENCRYPT, '12345678');
// result: áë*sY¶nŸÉX_33ô
以下是另一篇基于mcrypt blowfish php在与java和.net比较时结果稍有不同的文章:
$key = '1uY40SR771HkdDG';
$pass = 'stackoverflow';
$blocksize = mcrypt_get_block_size('blowfish', 'cbc'); // get block size
$pkcs = $blocksize - (strlen($data) % $blocksize); // get pkcs5 pad length
$data.= str_repeat(chr($pkcs), $pkcs); // append pkcs5 padding to the data
// encrypt and encode
$res = base64_encode(mcrypt_cbc(MCRYPT_BLOWFISH,$key, $pass, MCRYPT_ENCRYPT));
echo $res;
// result: 3WXKASjk35sI1+XJ7htOGw==
任何聪明的想法或者显而易见的问题吗?我只是想实现在这个问题的第一个链接中提到的
Blowfish.encryptString()
。