以前一直发现openfire数据库里面的密码是什么加密格式的,但是总弄不清楚,即便是同样的明文密码,在数据库中保存的结果却是不一样的。
今天又从登录入口查找,查到DefaultAuthProvider中的
public String getPassword(String username) throws UserNotFoundException
方法。在其中设置如下代码
String plainText = rs.getString(1); String encrypted = rs.getString(2); if (encrypted != null) { try { String plainPass = AuthFactory.decryptPassword(encrypted); System.out.println(plainPass); System.out.println(AuthFactory.encryptPassword(plainPass)); System.out.println(AuthFactory.encryptPassword(plainPass)); System.out.println(AuthFactory.encryptPassword(plainPass)); return AuthFactory.decryptPassword(encrypted); } catch (UnsupportedOperationException uoe) { // Ignore and return plain password instead. } }
打印的结果如下:
123456
cb669f302c1ae6c20d703cf985b4cfb416bf14c308cae75c
42695c45901a59f58f6594a25ee186aaef22af3039b1fdea
170658949dbcb31a4b6656fdd748f1bc6414f5f1df226211
发现即便是同样的明文密码,经过相同的加密方法,得到的结果却不一样。
于是,我查找到了AuthFactory中的
public static String decryptPassword(String encryptedPassword) { if (encryptedPassword == null) { return null; } Blowfish cipher = getCipher(); if (cipher == null) { throw new UnsupportedOperationException(); } return cipher.decryptString(encryptedPassword); } private static synchronized Blowfish getCipher() { if (cipher != null) { return cipher; } // Get the password key, stored as a database property. Obviously, // protecting your database is critical for making the // encryption fully secure. String keyString; try { keyString = JiveGlobals.getProperty("passwordKey"); if (keyString == null) { keyString = StringUtils.randomString(15); JiveGlobals.setProperty("passwordKey", keyString); // Check to make sure that setting the property worked. It won't work, // for example, when in setup mode. if (!keyString.equals(JiveGlobals.getProperty("passwordKey"))) { return null; } } cipher = new Blowfish(keyString); } catch (Exception e) { Log.error(e.getMessage(), e); } return cipher; }
由以上代码可以看出,加密以及解密过程都是由 Blowfish 方法提供。
我又将上面加密的密码做了一个解密的例子
public class Test1 { public static void main(String[] args) { Blowfish blow = new Blowfish("4dbKrqSsqQdUk3c"); System.out .println(blow .decryptString("c96d8464e6d01a70f39a2e44c4a5cc634b367e021b3a5f20")); System.out .println(blow .decryptString("42d812e85a602f479871acebe0a3987658abb6184fbb132f")); System.out .println(blow .decryptString("1c037aafe1fc7d653cd9bfab7f126aeba9a4abadfe479c8f")); } }
输出如下:
123456
123456
123456
由此可以看出,只要系统属性的passwordKey值不变化,无论加过密的密码是啥样子的,只要明文相同,就可以恢复成原来相同的明文
此特性是blowfish提供
Blowfish是1993年布鲁斯·施奈尔开发的对称密钥区块加密算法,区块长为64位,密钥为1至448位的可变长度。[1]与DES等算法相比,其处理速度较快。因为其无须授权即可使用,作为一种自由授权的加密方式在SSH、文件加密软件等被广泛地使用。
相关推荐
3. **登录接口**:在应用中,用户输入用户名和密码后,调用XMPP库提供的API,建立与Openfire服务器的连接,并进行身份验证。通常,会有一个登录方法,比如`XMPPTCPConnection.login(username, password)`。 4. **...
它包含用户注册、登录验证、密码重置等逻辑。源码中,`UserManager`和`AuthProvider`接口及其实现类揭示了用户数据的存储和验证机制。 2. 聊天记录存储:`persistence`模块处理数据持久化,包括聊天记录的保存。`...
Openfire安装配置手册 Openfire是一个基于XMPP协议的即时通讯服务器,提供了强大的聊天功能和插件架构。本手册将指导您搭建开发环境,安装和配置Openfire服务器。 一、 搭建开发环境 要搭建开发环境,需要安装...
- 配置Jwchat的认证方式为Openfire,使两者能进行身份验证同步。 - 测试Jwchat与Openfire的连接,确保用户可以成功登录并进行实时通信。 4. **部署Jwchat**: - 将Jwchat部署到Web服务器,如Apache、Nginx等,...
6. **安全与身份验证**:Openfire支持多种认证方式,包括基本的用户名/密码、LDAP集成、单点登录(SSO)等。Webchat会利用这些机制来验证用户身份,并确保通信的安全性。 7. **多语言支持**:Openfire Webchat通常...
在Linux环境下,Openfire是一款基于Java的开源即时通讯(IM)服务器,它允许用户通过XMPP协议进行实时通信。为了在Linux系统上成功安装并配置Openfire,我们需要遵循一系列步骤,涉及的主要组件包括JDK(Java ...
2. 登录管理控制台:使用管理员账号登录任意一个节点的管理控制台,检查“服务器状态”下的“集群”信息,应显示已连接的集群节点。 3. 测试即时通讯:创建用户并进行即时通讯,确保消息能在不同节点间正常传递,不...
《OpenFire深入浅出》这本书是关于开源即时通讯服务器OpenFire的权威指南,它涵盖了OpenFire的各个方面,从基础安装到高级配置,旨在帮助读者全面理解并熟练掌握OpenFire的使用和管理。OpenFire是一款基于Java开发的...
Openfire是一款基于Java的开源即时通讯(IM)服务器,它提供了强大的实时通信功能,支持XMPP协议,可以用于构建企业级的聊天、协作系统。在本文中,我们将深入探讨Openfire的相关资源,包括如何搭建、源码配置、编译...
在这个主题中,我们将深入探讨agsxmpp如何与Openfire服务器进行交互,以及agsxmpp.dll在登录和发送消息过程中可能遇到的问题及其解决方案。 一、agsxmpp与Openfire服务器通讯基础 1. **XMPP协议**:XMPP是一种基于...
2. Web管理控制台:通过在浏览器中输入服务器地址加端口(默认9090)访问Openfire管理界面,登录后可进行用户管理、群组管理、服务器设置等操作。 3. 邮件通知设置:为了接收服务器错误报告和系统通知,可以配置SMTP...
- 客户端需要实现登录注册、好友管理、群组功能、发送接收消息等功能,这些都涉及到Android的Activity、Fragment、Intent等组件的使用。 3. **Openfire集成**: - 开发者需要在Android客户端中集成Smack库,这是...
7. **安全性**:确保通信过程的安全,如使用安全连接、验证服务器身份等。 通过学习上述内容,开发者可以构建一个完整的即时通讯应用,让用户能够在Android设备上进行实时交流。同时,`MyXmpp`项目提供了一个实践...
- 完成安装后,通过浏览器访问`http://localhost:9090/`,输入默认的管理员账号(admin/admin),登录Openfire管理界面。 3. **配置Openfire** - **系统设置**:在管理界面,可以修改服务器的主机名、端口、时区...
在测试中,我们可能需要配置Spark客户端连接到Openfire服务器,验证用户登录、发送和接收消息的功能是否正常。Spark支持丰富的功能,如文件传输、群聊、视频通话等。 5. **XML流和XMPP协议**:Openfire和Spark之间...
本项目聚焦于基于Openfire的Android聊天软件开发,旨在为用户提供一个可以注册、登录、聊天、查找和添加好友的全方位沟通平台。 【描述】:“基于openfire的Android聊天软件,可注册 登陆 聊天 查找 添加好友” ...
1. **加密算法支持**:Openfire作为IM服务器,需要处理用户的登录认证、消息传输等安全问题。Bouncy Castle提供了各种加密算法,如RSA、AES、DES等,确保了数据在传输过程中的安全性。 2. **SSL/TLS支持**:...
4. 登录验证:连接成功后,使用login()方法进行用户身份验证。这需要提供用户名、密码以及可选的资源名(如设备标识)。 5. 发送和接收消息:连接并登录后,你可以使用Message类创建消息对象,设置收件人和消息内容...
### Openfire环境搭建知识点 #### 一、Openfire简介与工具准备 - **Openfire**:Openfire是一款基于XMPP协议的开源即时通讯服务器,它提供了丰富的功能支持,包括消息传递、文件传输、多用户聊天等。对于企业内部...
5. **配置Openfire**:使用管理员账户登录Web管理界面,可以对服务器进行详细配置,如添加域、创建用户、设置安全策略等。 6. **连接客户端**:你可以选择支持XMPP协议的客户端,如Smack(Java)、iOS上的...