Apache Shiro 密码学功能

Share |

密码学是一种通过隐藏信息或将其转换为废话来保护信息免遭不希望的访问的做法,其他人都无法阅读。 Shiro 专注于密码学的两个核心要素:使用公钥或私钥对诸如电子邮件之类的数据进行加密的密码,以及不可逆地对诸如密码之类的数据进行加密的哈希(即消息摘要)。

Shiro 密码学的主要目标是解决传统上极为复杂的领域,并为我们其他人提供便利,同时提供一组强大的加密功能。

Simplicity Features

  • 基于接口的,基于 POJO 的 **-所有 Shiro 的 API 均基于接口,并实现为 POJO。这使您可以轻松地使用兼容 JavaBeans 的格式(例如 JSON,YAML,Spring XML 等)来配置 Shiro 密码学组件。您还可以根据需要覆盖或自定义 Shiro,以利用其 API 节省时间和精力。

  • 基于 JCE 的简化包装器 -除非您是密码 maven,否则 Java 密码术扩展(JCE)可能很复杂且难以使用。 Shiro 的密码学 API 更易于理解和使用,并且大大简化了 JCE 概念。因此,现在即使密码学新手也可以在数分钟而不是数小时或数天的时间内找到所需的内容。而且您不会牺牲任何功能,因为如果需要,您仍然可以使用更复杂的 JCE 选项。

  • “面向对象”密码学概念 -JDK/JCE 的密码和消息摘要(Hash)类是抽象类,相当混乱,要求您使用带有类型不安全的字符串参数的钝工厂方法来获取要使用的实例。 Shiro“对象定向”密码和哈希基于干净的对象层次结构,并允许您通过简单的实例化来使用它们。

  • 运行时异常 -与 Shiro 中的其他所有地方一样,所有加密异常都是 RuntimeException。您可以根据需要决定是否捕获异常。

Cipher Features

  • OO 层次结构 -与 JCE 不同,Shiro Cipher 表示遵循面向对象的类层次结构,这些层次结构与它们的 math 概念相匹配:AbstractSymmetricCipherServiceDefaultBlockCipherServiceAesCipherService等。这使您可以轻松地覆盖现有类并根据需要扩展功能。

  • 仅实例化一个类 -与 JCE 使用 String 令牌参数的令人困惑的工厂方法不同,使用 Shiro Ciphers 更容易-只需实例化一个类,根据需要使用 JavaBeans 属性对其进行配置,并根据需要使用它。例如new AesCipherService()

  • 更安全的默认设置 -JCE Cipher 实例采用“最低公分母”默认值,并且不会自动启用更安全的选项。 Shiro 将自动启用更安全的选项,以确保您的数据在默认情况下尽可能安全,从而帮助您防止意外的安全漏洞。

Hash Features

  • 默认接口实现 -Shiro 提供了默认的 Hash(即 JDK 中的消息摘要)开箱即用的实现,例如 MD5,SHA1,SHA-256 等。这提供了一种类型安全的构造方法(例如new Md5Hash(data)),而不是被迫在 JDK 中使用类型不安全的字符串工厂方法。

  • 内置的 Hex 和 Base64 转换 -Shiro Hash 实例可以通过其toHex()toBase64()方法自动提供哈希数据的 Hex 和 Base-64 编码。因此,现在您无需弄清楚如何自己正确编码数据。

  • 内置的 Salt 和重复的哈希支持 -Salt 和重复的 hash 迭代在哈希数据时是非常有价值的工具,尤其是在保护用户密码方面。 Shiro 的 Hash 实现开箱即用支持盐和多个哈希迭代,因此您不必在可能需要的任何地方重复此逻辑。

使用 Shiro 在 10 分钟内入门

通过我们的10 分钟教程自己尝试 Shiro。如果您对 Shiro 有任何疑问,请查看我们的community forum用户邮件列表以获取社区的答案。