Shiro-05-shiro 基础知识补充密码学+哈希散列

这篇具有很好参考价值的文章主要介绍了Shiro-05-shiro 基础知识补充密码学+哈希散列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

密码学

密码术是隐藏或混淆数据的过程,因此窥探眼睛无法理解它。

Shiro的加密目标是简化JDK的加密支持并使之可用。

需要特别注意的是,密码通常不是特定于主题的,因此Shiro API的其中一个领域不是特定于主题的。

即使未使用“主题”,您也可以在任何地方使用Shiro的加密支持。

Shiro真正侧重于其加密支持的两个领域是加密哈希(又名消息摘要)和加密密码领域。

让我们更详细地看看这两个。

散列

如果您使用了JDK的MessageDigest类,您很快就会意识到使用它有点麻烦。它具有笨拙的基于静态方法的基于工厂的API,而不是面向对象的API,因此您不得不捕获可能永远不需要捕获的已检查异常。如果您需要十六进制编码或Base64编码的消息摘要输出,则由您自己决定-两者均不提供标准的JDK支持。

Shiro通过干净直观的哈希API解决了这些问题。

例如,让我们考虑MD5散列文件并确定该散列的十六进制值的相对常见的情况。称为“校验和”,通常在提供文件下载时使用-用户可以对下载的文件执行自己的MD5哈希,并断言其校验和与下载站点上的校验和匹配。如果它们匹配,则用户可以充分假设文件在传输过程中未被篡改。

在没有Shiro的情况下,您可以尝试以下操作:

  1. 将文件转换为字节数组。 JDK中没有任何东西可以帮助您解决此问题,因此您需要创建一个辅助方法,该方法可以打开FileInputStream,使用字节缓冲区并抛出适当的IOException等。

  2. 使用MessageDigest类对字节数组进行哈希处理,以处理适当的异常,如下面的清单12所示。

  3. 将散列字节数组编码为十六进制字符。 JDK中也没有任何东西可以提供帮助,因此您需要创建另一个帮助器方法,并可能在实现中使用按位运算和移位。

  • Listing 12. JDK’s MessageDigest
try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.digest(bytes);
    byte[] hashed = md.digest();
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} 

对于如此简单且相对常见的事物而言,这是一项巨大的工作。

现在,说明如何使用Shiro进行完全相同的操作。

String hex = new Md5Hash(myFile).toHex(); 

使用Shiro简化所有工作时,了解正在发生的事情非常简单和容易。

SHA-512哈希和密码的Base64编码也很容易。

String encodedPassword =
    new Sha512Hash(password, salt, count).toBase64();

您会看到Shiro在很大程度上简化了哈希和编码,从而在此过程中节省了一些理智。

密码

密码是可以使用密钥可逆地转换数据的密码算法。我们使用它们来保护数据安全,尤其是在传输或存储数据时,尤其是在数据容易被撬开的时候。

如果您曾经使用过JDK密码API,尤其是javax.crypto.Cipher类,那么您就会知道,驯服它可能是一件极其复杂的事情。对于初学者来说,每种可能的Cipher配置始终由javax.crypto.Cipher的实例表示。

需要做公钥/私钥加密吗?

您使用密码。是否需要使用分组密码进行流操作?您使用密码。是否需要创建AES 256位密码来保护数据?您使用密码。你明白了。

以及如何创建所需的Cipher实例?

您创建了一个复杂的,不直观的,用令牌分隔的密码选项字符串,称为“转换字符串”,并将该字符串传递给Cipher.getInstance静态工厂方法。使用这种密码选项字符串方法,没有类型安全性来确保您使用有效的选项。这也隐含地意味着没有JavaDoc可以帮助您了解相关选项。而且,即使您知道配置正确,也需要处理经过检查的异常,以防您的字符串格式错误。如您所见,使用JDK Ciphers是一项繁琐的任务。这些技术很久以前曾经是Java API的标准,但是时代已经改变,我们希望有一种更简单的方法。

Shiro试图通过引入其CipherService API简化整个密码算法的概念。

大多数开发人员在保护数据时都希望使用CipherService:一种简单,无状态,线程安全的API,可以在一个方法调用中完整地加密或解密数据。您所需要做的就是提供密钥,然后可以根据需要加密或解密。

例如,可以使用256位AES加密,如下面的清单13所示。

  • Listing 13. Apache Shiro’s Encryption API
AesCipherService cipherService = new AesCipherService();
cipherService.setKeySize(256);
//create a test key:
byte[] testKey = cipherService.generateNewKey();

//encrypt a file’s bytes:
byte[] encrypted =
    cipherService.encrypt(fileBytes, testKey);

与JDK的Cipher API相比,Shiro示例更简单:

  • 您可以直接实例化CipherService-没有奇怪或令人困惑的工厂方法。

  • 密码配置选项表示为与JavaBeans兼容的getter和setter-没有奇怪且难以理解的“转换字符串”。

  • 加密和解密在单个方法调用中执行。

  • 没有强制检查的异常。 如果需要,请捕获Shiro的CryptoException。

Shiro的CipherService API还有其他好处,例如既支持基于字节数组的加密/解密(称为“块”操作),又支持基于流的加密/解密(例如,加密音频或视频)。

Java密码术不必太痛苦。

Shiro的密码学支持旨在简化您保护数据安全的工作。

Shiro-05-shiro 基础知识补充密码学+哈希散列,安全,web,哈希算法,密码学,算法文章来源地址https://www.toymoban.com/news/detail-831962.html

到了这里,关于Shiro-05-shiro 基础知识补充密码学+哈希散列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 数据结构—基础知识(12):二叉树算法补充

    复制二叉树 【算法步骤】 如果是空树,递归结束,否则进行以下操作: 申请一个新结点空间,复制根结点; 递归复制左子树; 递归复制右子树。 计算二叉树的深度 【算法步骤】 如果是空树,递归结束,深度为0,否则进行以下操作: 递归计算左子树的深度记为m; 递归计

    2024年01月25日
    浏览(12)
  • 05电容基础知识

    05电容基础知识

    目录 一、简介 二、命名规则 三、标准及常用容值 四、电容分类 1、陶瓷电容 2、钽电容 3、铝电解电容 4、薄膜电容 5、超级电容 五、计算公式(串并联) 六、平板电容器公式 七、电容的VCR 八、储能公式 九、充放电公式 十、作用 十一、等效模型 十二、参数及选型 1、容量

    2024年02月01日
    浏览(8)
  • Kafka入门05——基础知识

    Kafka入门05——基础知识

    目录 副本数据同步原理 HW和LEO的更新流程 第一种情况 第二种情况 数据丢失的情况 解决方案 Leader副本的选举过程 日志清除策略和压缩策略 日志清除策略 日志压缩策略 Kafka存储手段 零拷贝(Zero-Copy) 页缓存(Page Cache) Kafka的消息可靠性 在ISR中,只要有一个Follower存活就能

    2024年02月08日
    浏览(7)
  • 【新版】系统架构设计师 - 计算机系统基础知识【补充】

    【新版】系统架构设计师 - 计算机系统基础知识【补充】

    个人总结,仅供参考,欢迎加好友一起讨论 计算机语言(★) 多媒体(★) 系统工程(★★★) 第二版新教材零星内容,主要对应2.6-2.8三个小节,这块内容大概率不考,可以做个简单了解,如果说考的话,概率比较大的是系统工程内容。 计算机语言是指用于人与计算机之

    2024年02月08日
    浏览(50)
  • Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机

    Unity 游戏开发、01 基础篇 Q 手型工具(鼠标中键): 上下左右移动场景 ALT + 鼠标左键: 以视图为中心旋转 鼠标右键: 以观察者为中心旋转 SHIFT + Gizmo方块: Y轴归位 物体节点 + F: 观察者定位至物体 3D项目一般窗口布局如下 全局光照GI(Glballlumination)(编辑模式下才能生成

    2024年02月09日
    浏览(32)
  • 网络安全 Day20-计算机网络基础知识05(网络原理)

    网络安全 Day20-计算机网络基础知识05(网络原理)

    OSI 7层网络通信原理模型 OSI 国际网互联 OSI 数据包封装解封装过程 北京局域网主机A到深圳局域网主机B数据工作流程 排查网线,排查网卡,排查网卡的驱动 查看网卡IP,没有配置 IP、网关、DNS配置正确 ping百度是否能上网(ping是icmp协议) 如果ping不同,判断DNS是否有问题 p

    2024年02月15日
    浏览(16)
  • 密码基础知识——密码的概念与作用

    密码基础知识——密码的概念与作用

    密码是指采用 特定变换 的方法对 信息 等进行 加密保护、安全认证 的 技术、产品和服务 。 在我国,密码分为 核心密码、普通密码和商用密码 ,其中商用密码用于保护 不属于国家秘密 的信息。 从内容上看,密码技术包括密码编码、实现、协议、安全防护、分析破译,以

    2023年04月26日
    浏览(11)
  • 100天精通Python丨基础知识篇 —— 05、7大基础数据类型详解(变量、列表、集合、字典、元组)

    《100天精通Python专栏 - 快速入门到黑科技》 是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造,专栏分为基础知识篇和黑科技应用篇。 基础知识篇 以理论知识为主,旨在帮助没有语言基础的小伙伴,学习我整理成体系的精华知识,快速入门构建起知识框

    2023年04月18日
    浏览(12)
  • 【现代密码学】笔记 补充7-- CCA安全与认证加密《introduction to modern cryphtography》

    【现代密码学】笔记 补充7-- CCA安全与认证加密《introduction to modern cryphtography》

    主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。 内容补充:骆婷老师的PPT 《introduction to modern cryphtography》–Jonathan Katz, Yehuda Lindell(现代密码学——原理与协议)中相关章节 密码学复习笔记 这个博主好有意思 初步笔记,如有错误请指正 快速补充一些密码

    2024年01月17日
    浏览(18)
  • 网络安全 | 密码基础知识介绍

    网络安全 | 密码基础知识介绍

    安全问题 保密性:对发送的消息进行获取 完整性:对发送的消息进行篡改 身份伪造:对发送的主体身份进行篡改,a发的消息,篡改为b发的 行为抵赖:对发送的消息进行否认,丧失行为的可追溯性 密码技术 保密性 完整性 真实性 不可否认性 密码发展史 密码起源:狼烟、虎

    2024年02月12日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包