- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
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()
作为这个问题第一个链接中引用的内容。
最佳答案
这是我创建的一个类,它正确地加密和解密。
请注意,您需要保存/[pre/app]end IV 才能重现结果。
Java 代码的一些测试向量会很好。
<?php
/**
* Emulate OpenFire Blowfish Class
*/
class OpenFireBlowfish
{
private $key;
private $cipher;
function __construct($pass)
{
$this->cipher = mcrypt_module_open('blowfish','','cbc','');
$this->key = pack('H*',sha1($pass));
}
function encryptString($plaintext, $iv = '')
{
if ($iv == '') {
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($this->cipher));
}
else {
$iv = pack("H*", $iv);
}
mcrypt_generic_init($this->cipher, $this->key, $iv);
$bs = mcrypt_enc_get_block_size($this->cipher); // get block size
$plaintext = mb_convert_encoding($plaintext,'UTF-16BE'); // set to 2 byte, network order
$pkcs = $bs - (strlen($plaintext) % $bs); // get pkcs5 pad length
$pkcs = str_repeat(chr($pkcs), $pkcs); // create padding string
$plaintext = $plaintext.$pkcs; // append pkcs5 padding to the data
$result = mcrypt_generic($this->cipher, $plaintext);
mcrypt_generic_deinit($this->cipher);
return $iv.$result;
}
function decryptString($ciphertext)
{
$bs = mcrypt_enc_get_block_size($this->cipher); // get block size
$iv_size = mcrypt_enc_get_iv_size($this->cipher);
if ((strlen($ciphertext) % $bs) != 0) { // check string is proper size
return false;
}
$iv = substr($ciphertext, 0, $iv_size); // retrieve IV
$ciphertext = substr($ciphertext, $iv_size);
mcrypt_generic_init($this->cipher, $this->key, $iv);
$result = mdecrypt_generic($this->cipher, $ciphertext); // decrypt
$padding = ord(substr($result,-1)); // retrieve padding
$result = substr($result,0,$padding * -1); // and remove it
mcrypt_generic_deinit($this->cipher);
return $result;
}
function __destruct()
{
mcrypt_module_close($this->cipher);
}
}
$enckey = "1uY40SR771HkdDG";
$enciv = 'd3f499857b40ac45';
$javastring = 'd3f499857b40ac45c41828ccaa5ee1f90b19ca4e0560d1e2dcf4a305f219a4a2342aa7364e9950db';
$a = new OpenFireBlowfish($enckey);
$encstring = bin2hex($a->encryptString('stackoverflow',$enciv));
echo $encstring . "\n";
echo $a->decryptString(pack("H*", $encstring)) . "\n";
$b = new OpenFireBlowfish($enckey);
echo $b->decryptString(pack("H*", $javastring)) . "\n";
关于php - 通过 PHP 在 openfire MySQL 中创建加密密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705098/
我在玩 strophe 和 Openfire 3.7.1(带有用户服务和监控插件)。 我读过 http://xmpp.org/extensions/xep-0136.html (7.2 检索集合) 我
我在html表单上输入jid和pwd,并使用Strope连接到openfire,但是当我按下登录按钮时,xmpp服务器响应是错误302。我在 openfire 上启用了该选项,然后重新启动它。 var
我是 smack API 的新手。我正在尝试开发一个聊天应用程序,我试图在其中设置和获取状态。 当我更改用户的存在时,它工作得很好,并且反射(reflect)在 Openfire 服务器中。 但是当我
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4 个月前关闭。 Improve t
openfire 4.0.2 https://github.com/igniterealtime/REST-API-Client 我正在使用 REST API 客户端将用户添加到房间。查看调试信息,似
是否可以使用 Strope.js 使用匿名用户创建新用户(带内注册),如示例所示:http://groups.google.com/group/strophe/browse_thread/thread
我正在使用以下软件进行 Android 聊天应用 XMPP 服务器:Openfire 3.9.3 XMPP 客户端:Asmack-android-8-4.0.4.jar 当我手动更改登录用户的存在时,
我正在使用 http-bind 和 openfire 来启用 BOSH 并使用 strophe 访问该服务,问题是我收到以下错误 Chrome 控制台报错 XMLHttpRequest cannot
Closed. This question is off-topic。它当前不接受答案。 想改善这个问题吗? Update the question,所以它是用于堆栈溢出的on-topic。 7年前关
我使用openfire 3.9.3服务器和Android和IOS作为客户端。我想在收件人用户离线时通过推送通知向两个客户端发送消息。当发送推送时,发送者应该收到消息收据。 为此,我尝试过: 制作拦截器
据我了解,邮件的默认大小为 1MB。 有没有办法重新配置限制。 对此问题的任何帮助将不胜感激。 谢谢 最佳答案 您需要在Openfire中设置“xmpp.parser.buffer.size”属性(以
我在客户端上使用 OpenFire 服务器进行即时消息传递和 JSJaC JavaScript 库。我是 XMPP 技术的新手。 我想要的是加载时我想发送用户列表并接收每个用户的状态。就像是 $(fu
我正在制作一个 Openfire 插件,用于将消息从服务器发送到客户端。 客户端发送带有自定义扩展名的消息,无需添加属性,因为插件将决定收件人。但是 Openfire 会将其退回给发送者。如何使此
我使用的是Windows server 2012R2并安装了openfire 3.10.2。但现在停止工作吧。当我尝试从窗口服务启动它时,它显示消息 error message 下面是日志.. 201
所以我有这个代码来连接到 openfire XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
目标:- 存储离线消息。 我无法存储离线消息。 我已经安装了用于将消息存储到服务器的监控服务插件。 普通消息存储在 ofMessageArchive 表中,离线消息存储在名为 ofOffline 的表
我正在开发 openfire 插件并面临一些性能问题。我的问题是哪种类型的插件集成最快。 数据包拦截器 智商处理器 组件 其他? 我正在使用数据包拦截器并考虑切换到 IQHandler 并通过 $iq
我通过扩展 AbstractComponent 类,基于 Whack 库构建了一个外部 openfire 组件。我希望客户端订阅我的组件,并在组件上线和离线时接收状态通知。所以我的问题是我们如何处理基
我正在尝试将 Openfire 与我使用 Mysql Workbench 创建的自定义 SQL 数据库连接起来。 我修改了 openfire.xml 文件如下: 9090
我正在为 Android 开发一个简单的聊天工具。我正在阅读有关 Openfire ante asmack API 的信息。显然,用户应该只能看到存储在他的设备中的联系人,所以:我如何知道存储在服务器
我是一名优秀的程序员,十分优秀!