【发布时间】:2011-12-04 01:00:08
【问题描述】:
Openfire 使用河豚加密将加密密码存储在数据库中。
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 slightly different results when compared to java and .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(),正如这个问题的第一个链接中所引用的那样。
【问题讨论】:
-
最明显的问题是您加密密码而不是散列密码。除非您绝对需要密码是其原始形式,否则您不应该这样做。
-
XMPP 协议使用明文对用户进行身份验证。这就是 Openfire 中需要加密/解密的原因。只是想用我所拥有的...
-
你有一些关于它产生的测试向量吗?即密钥、iv、数据和密文组合
标签: php openfire mcrypt blowfish