`
linyu19872008
  • 浏览: 281193 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

openfire登录验证AuthProvider

 
阅读更多

以前一直发现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、文件加密软件等被广泛地使用。

分享到:
评论

相关推荐

    使用openfire登录android

    3. **登录接口**:在应用中,用户输入用户名和密码后,调用XMPP库提供的API,建立与Openfire服务器的连接,并进行身份验证。通常,会有一个登录方法,比如`XMPPTCPConnection.login(username, password)`。 4. **...

    openfire-4.5.0源码

    它包含用户注册、登录验证、密码重置等逻辑。源码中,`UserManager`和`AuthProvider`接口及其实现类揭示了用户数据的存储和验证机制。 2. 聊天记录存储:`persistence`模块处理数据持久化,包括聊天记录的保存。`...

    Openfire安装配置手册

    Openfire安装配置手册 Openfire是一个基于XMPP协议的即时通讯服务器,提供了强大的聊天功能和插件架构。本手册将指导您搭建开发环境,安装和配置Openfire服务器。 一、 搭建开发环境 要搭建开发环境,需要安装...

    Jwchat+openfire部署

    - 配置Jwchat的认证方式为Openfire,使两者能进行身份验证同步。 - 测试Jwchat与Openfire的连接,确保用户可以成功登录并进行实时通信。 4. **部署Jwchat**: - 将Jwchat部署到Web服务器,如Apache、Nginx等,...

    openfire webchat开发包

    6. **安全与身份验证**:Openfire支持多种认证方式,包括基本的用户名/密码、LDAP集成、单点登录(SSO)等。Webchat会利用这些机制来验证用户身份,并确保通信的安全性。 7. **多语言支持**:Openfire Webchat通常...

    Openfire集群正确配置

    2. 登录管理控制台:使用管理员账号登录任意一个节点的管理控制台,检查“服务器状态”下的“集群”信息,应显示已连接的集群节点。 3. 测试即时通讯:创建用户并进行即时通讯,确保消息能在不同节点间正常传递,不...

    openfire深入浅出

    《OpenFire深入浅出》这本书是关于开源即时通讯服务器OpenFire的权威指南,它涵盖了OpenFire的各个方面,从基础安装到高级配置,旨在帮助读者全面理解并熟练掌握OpenFire的使用和管理。OpenFire是一款基于Java开发的...

    openfire的相关资源

    Openfire是一款基于Java的开源即时通讯(IM)服务器,它提供了强大的实时通信功能,支持XMPP协议,可以用于构建企业级的聊天、协作系统。在本文中,我们将深入探讨Openfire的相关资源,包括如何搭建、源码配置、编译...

    agsxmpp与openfire服务器通讯

    在这个主题中,我们将深入探讨agsxmpp如何与Openfire服务器进行交互,以及agsxmpp.dll在登录和发送消息过程中可能遇到的问题及其解决方案。 一、agsxmpp与Openfire服务器通讯基础 1. **XMPP协议**:XMPP是一种基于...

    openfire聊天服务端源码

    "聊天服务器"和"聊天客户端"标签则强调了Openfire在IM系统中的角色,服务器端负责处理用户的登录、消息传递、群组管理等逻辑,而客户端则是用户交互的界面。开发者可以通过Openfire提供的SDK或API,为Android和iOS...

    openfire部署学习资料

    2. Web管理控制台:通过在浏览器中输入服务器地址加端口(默认9090)访问Openfire管理界面,登录后可进行用户管理、群组管理、服务器设置等操作。 3. 邮件通知设置:为了接收服务器错误报告和系统通知,可以配置SMTP...

    基于openfire 仿QQ

    - 客户端需要实现登录注册、好友管理、群组功能、发送接收消息等功能,这些都涉及到Android的Activity、Fragment、Intent等组件的使用。 3. **Openfire集成**: - 开发者需要在Android客户端中集成Smack库,这是...

    openfire+asmack中文api+androidDemo

    7. **安全性**:确保通信过程的安全,如使用安全连接、验证服务器身份等。 通过学习上述内容,开发者可以构建一个完整的即时通讯应用,让用户能够在Android设备上进行实时交流。同时,`MyXmpp`项目提供了一个实践...

    openfire_4_0_1

    - 完成安装后,通过浏览器访问`http://localhost:9090/`,输入默认的管理员账号(admin/admin),登录Openfire管理界面。 3. **配置Openfire** - **系统设置**:在管理界面,可以修改服务器的主机名、端口、时区...

    openfire测试demo

    在测试中,我们可能需要配置Spark客户端连接到Openfire服务器,验证用户登录、发送和接收消息的功能是否正常。Spark支持丰富的功能,如文件传输、群聊、视频通话等。 5. **XML流和XMPP协议**:Openfire和Spark之间...

    基于openfire的安卓聊天软件

    本项目聚焦于基于Openfire的Android聊天软件开发,旨在为用户提供一个可以注册、登录、聊天、查找和添加好友的全方位沟通平台。 【描述】:“基于openfire的Android聊天软件,可注册 登陆 聊天 查找 添加好友” ...

    openfire 3.9.3第二次开发集成所需要的包

    1. **加密算法支持**:Openfire作为IM服务器,需要处理用户的登录认证、消息传输等安全问题。Bouncy Castle提供了各种加密算法,如RSA、AES、DES等,确保了数据在传输过程中的安全性。 2. **SSL/TLS支持**:...

    asmack连接openfire测试

    4. 登录验证:连接成功后,使用login()方法进行用户身份验证。这需要提供用户名、密码以及可选的资源名(如设备标识)。 5. 发送和接收消息:连接并登录后,你可以使用Message类创建消息对象,设置收件人和消息内容...

    openfire环境搭建说明

    ### Openfire环境搭建知识点 #### 一、Openfire简介与工具准备 - **Openfire**:Openfire是一款基于XMPP协议的开源即时通讯服务器,它提供了丰富的功能支持,包括消息传递、文件传输、多用户聊天等。对于企业内部...

    xmpp,openfire搭建ppt

    5. **配置Openfire**:使用管理员账户登录Web管理界面,可以对服务器进行详细配置,如添加域、创建用户、设置安全策略等。 6. **连接客户端**:你可以选择支持XMPP协议的客户端,如Smack(Java)、iOS上的...

Global site tag (gtag.js) - Google Analytics