如果你曾使用过JDK的MessageDigest类,你会立刻意识到它的使用有点麻烦。MessageDigest类有一个笨拙的基于工厂的静态方法API,它不是面向对象的,并且你被迫去捕获那些永远都不必捕获的CheckedExceptions。如果需要输出十六进制编码或Base64编码的消息摘要,你只有靠自己-对上述两种编码,没有标准的JDK支持它们。Shiro用一种干净而直观的哈希API解决了上述问题。
打个比方,考虑比较常见的情况,使用MD5哈希一个文件,并确定该哈希的十六进制值。被称为‘校验和’,这在提供文件下载时常用到-用户可以对下载文件执行自己的MD5哈希。如果它们匹配,用户完全可以认定文件在传输过程中没有被篡改。
不使用Shiro,你需要如下步骤才能完成上述内容:
将文件转换成字节数组。JDK中没有干这事的,故而你需要创建一个辅助方法用于打开FileInputStream,使用字节缓存区,并抛出相关的IOExceptions,等等。
使用MessageDigest类对字节数组进行哈希,处理相关异常。
将哈希后的字节数组编码成十六进制字符。JDK中还是没有干这事的,你依旧需要创建另外一个辅助方法,有可能在你的实现中会使用位操作和位移动。
JDK的消息摘要过程如下:
try{
MessageDigestmd=MessageDigest.getInstance("MD5");
md.digest(bytes);
byte[]hashed=md.digest();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
|
对于这样简单普遍的需求,这个工作量实在太大了。现在看看Shiro是如何做同样事情的:
Stringhex=newMd5Hash(myFile).toHex();
当使用Shiro简化所有这些工作时,一切都非常简单明了。完成SHA-512哈希和密码的Base64编码也一样简单。
StringencodedPassword=newSha512Hash(password,salt,count).toBase64();
你可以看到Shiro对哈希和编码简化了不少,挽救了你处理在这类问题上所消耗的脑细胞。
Shiro中哈希功能的特点:
缺省接口的实现—Shiro提供了默认的散列(也称为消息摘要)算法,如MD5,SHA-256,SHA等,实现了开箱即用。这提供了一个类型安全的实施方法(如新Md5Hash(data)),而不是被迫使用JDK中不安全类型的字符串的工厂方法。
内置的Hex和Base64编码转换—Shiro在做哈希运算的时候可以通过toHex()和toBase64()方法自动为十六进制和Base-64编码的哈希数据进行编码转换。
内置的盐和重复散列支持—盐和重复的哈希迭代散列数据是非常有价值的工具,特别是当它涉及到保护用户的密码。Shiro的哈希功能支持开箱即用的盐和多个hash迭代,这样你就不必在任何你可能需要它的地方重复这个逻辑。
分享到:
相关推荐
Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等功能。这个教程将帮助你深入理解和有效地使用Shiro框架。在本文中,我们将详细探讨Shiro的核心概念、主要功能和常见用法...
3. **Cryptography**:Shiro 提供了丰富的加密工具,包括密码哈希、消息摘要算法、对称和非对称加密等,确保数据的安全传输和存储。 4. **Session Management**:Shiro 可以独立于应用服务器进行会话管理,支持...
Apache Shiro 是一个强大且易用的Java安全框架,提供了身份验证、授权、加密和会话管理功能,简化了企业级应用的安全实现。在本文中,我们将深入探讨Apache Shiro 1.6版本的重要更新,以及它如何修复了一个绕过认证...
在Shiro 1.10.0中,可能会包含对认证策略的优化,比如支持多种凭证匹配器(CredentialsMatcher),以适应不同类型的认证机制,如哈希或加密方式。 2. **授权**:授权涉及确定用户是否被允许执行特定操作。Shiro的...
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了身份认证、授权、加密和会话管理功能,让开发人员可以轻松地在应用中处理安全性问题。本资源包含了一个 Apache Shiro 的身份认证例子的源码,这对于理解和...
5. **org.apache.shiro.crypto**: 提供了一系列加密工具和算法,如哈希、加密解密等,用于保护敏感数据的安全。 6. **org.apache.shiro.session**: 会话管理模块,负责用户的会话状态维护,可以跨应用和服务器集群...
6. **shiro-crypto-hash-1.7.1.jar**和**shiro-crypto-cipher-1.7.1.jar**:这两个模块涉及加密功能,前者可能包含哈希算法,用于密码存储和验证;后者可能包含加密算法,如AES、DES等,用于数据保护。 7. **shiro-...
为了提高安全性,Shiro推荐使用盐值(salt)和迭代次数来增强哈希过程,防止彩虹表攻击。此外,Shiro还支持加密和解密其他敏感数据,如API密钥或用户隐私信息。 **会话管理**是另一个关键特性,尤其是在Web环境中。...
Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以简化开发人员处理安全的复杂性。Shiro适用于各种应用,从小型独立应用到大型分布式系统,都能有效地支持。 在"shiro-...
4. **加密**:Shiro提供了丰富的加密工具,如MD5、SHA等哈希算法,以及对称和非对称加密算法,帮助开发者对敏感数据进行加密处理,确保数据的安全性。 5. **Web支持**:Shiro能够轻松集成到Web应用中,提供过滤器...
Apache Shiro 是一个轻量级的 Java 安全框架,旨在简化应用程序的安全管理,包括认证、授权、加密和会话管理。它的设计理念是使开发者能够更专注于应用逻辑,而不是安全细节,同时提供了一套直观且易于使用的 API。 ...
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,简化了开发人员处理安全问题的过程。本参考手册主要分为以下几个部分,详细介绍了 Apache Shiro 的各个方面。 1. **...
标题 "基于SpringBoot + Thymeleaf + Layui + Apache Shiro + Redis + .zip" 描述了一个使用现代Web开发技术构建的项目。这个项目利用了SpringBoot作为核心框架,Thymeleaf作为模板引擎,Layui作为前端UI框架,...
Apache Shiro是一款强大的Java安全框架,它为开发者提供了一种简单、直观的方式来处理认证、授权、会话管理和加密等安全问题。这篇开发文档是Shiro的详细指南,旨在帮助开发者深入理解和有效地使用这个框架。 一、...
4. **org.apache.shiro.crypto.jar**:提供了一系列加密工具,用于密码哈希、加密敏感数据等。 5. **org.apache.shiro.lang.jar**:提供了一些辅助类和枚举,用于更方便地使用Shiro的API。 6. **org.apache.shiro....
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、会话管理和加密等全面的安全服务。对于开发者来说,通过学习 Shiro 的源码,可以深入理解其内部工作原理,提高安全编程的能力。在这个 Shiro...
Shiro 内置了多种加密工具,如MessageDigest用于哈希计算,CipherService用于加解密。这些工具可以帮助开发者安全地处理敏感数据,如密码存储和传输。 五、Web 支持 Shiro 提供了完善的Web安全特性,包括过滤器...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、会话管理和加密等核心功能。这个"Apache_Shiro参考手册中文版-converted.zip"文件包含了一个转换后的中文版Apache Shiro参考手册,方便中国开发者...
Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地用于构建和强化应用程序的安全性。Shiro的核心目标是为开发者提供一个简单易用的安全API,使得开发者能够快速...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用程序。这个文档是Apache Shiro 1.2.x版本的中文参考指南,它将帮助我们深入理解和使用...