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的密码学支持旨在简化您保护数据安全的工作。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【elk查日志 elastic(kibana)】

文章目录 概要具体的使用方式一:查找接口调用历史二:查找自己的打印日志三:查找错误日志 概要 每次查日志,我都需要别人帮我,时间长了总觉得不好意思,所以这次下定决心好好的梳理一下,怎么查日…

spellman电源维修X3635系列CCM5P4X3635

Spellman高压发生器维修Perkin Elmer分析仪电源维修CCM5P4X3635 Perkin Elmer W102266 X射线高压发生器spellman电源维修X4297系列CT机高压电源维修CT42;CT70系列。SPELLMAN高压发生器应用于东芝CT机XVISION/EX、AUKLET系列、ASTEION系列、以及多排系列&#xff0c…

一文概括|CSC访问学者/博士后/联培申请及派出流程详解

为帮助申请者了解国家留学基金委(CSC)的政策,以及申报及派出的全过程,知识人网小编利用本文简略介绍并提出规划建议。 公派留学包括国家、地方(含省市、行业、学校医院等单位)资助派出。而国家公派则由留学…

HarmonyOS开发篇—数据管理(分布式数据服务)

分布式数据服务概述 分布式数据服务(Distributed Data Service,DDS) 为应用程序提供不同设备间数据库数据分布式的能力。通过调用分布式数据接口,应用程序将数据保存到分布式数据库中。通过结合帐号、应用和数据库三元组&#xf…

软件测试实训系统建设方案2024

软件测试实训室解决方案 一 、方案概述 软件测试实训解决方案是一个复杂且至关重要的过程,它确保了软件在开发过程中的各个模块能够正确地集成和交互。通过这一系列的测试步骤,开发团队能够及时发现并修复潜在的问题,从而提高软件的整体质量…

【漏洞复现-通达OA】通达OA share存在前台SQL注入漏洞

一、漏洞简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。通达OA为各行业不同规模的众多用户提供信息化管理能力,包…

【Java EE初阶十五】网络编程TCP/IP协议(二)

1. 关于TCP 1.1 TCP 的socket api tcp的socket api和U大片的socket api差异很大,但是和前面所讲的文件操作很密切的联系 下面主要讲解两个关键的类: 1、ServerSocket:给服务器使用的类,使用这个类来绑定端口号 2、Socket&#xf…

全网最容易理解的KMP算法讲解

引言 其实网上有很多讲解KMP算法的文章,详略不一,我认为有两点没有解释清楚: 第一点:匹配失败以后,模式串的位移 第二点:next数组的生成算法 希望本篇文章能将KMP算法清晰易懂的拆解开来。 暴力匹配 …

网络同步—帧同步和状态同步解析

概述 同步就是要多个客户端表现效果是一致的,而且对于大多数的游戏,不仅仅要表现一致,还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。 帧同步和…

算法-3-基本的数据结构

单双链表 1.单链表双链表如何反转 import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int…

掘根宝典之C++深复制与浅复制(复制构造函数,默认复制构造函数)

到目前为止我们已经学了构造函数,默认构造函数,析构函数:http://t.csdnimg.cn/EOQxx 转换函数,转换构造函数:http://t.csdnimg.cn/kiHo6 友元函数:http://t.csdnimg.cn/To8Tj 接下来我们来学习一个新函数…

python毕设选题 - 大数据全国疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的…

2024阿里云云服务器ECS价格表出炉

2024年最新阿里云服务器租用费用优惠价格表,轻量2核2G3M带宽轻量服务器一年61元,折合5元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年,2核4G4M轻量服务器165元一年,2核4G服务器30元3…

【Funny Game】 人生重开模拟器

目录 【Funny Game】 人生重开模拟器! 人生重开模拟器! 文章所属专区 Funny Game 人生重开模拟器! 人生重开模拟器,让你体验从零开始的奇妙人生。在这个充满惊喜和挑战的游戏中,你可以自由选择性别、出生地、家庭背景…

String.format()详细用法

String 类有一个强大的字符串格式化方法 format()。下面是常用的方法总结。 一、占位符类型 String formatted String.format("%s今年%d岁。", "小李", 25); // "小李今年25岁。" 二、字符串和整数格式化 // 将第二个入参拼接到模板中,入参长…

职业性格在求职应聘和跳槽中的作用

性格测试对跳槽者的影响大不大?首先我们要弄清楚两个问题,性格对我们的职业生涯又没有影响,性格测试是什么,职场中有哪些应用?性格可以说从生下来就有了,随着我们的成长,我们的性格也越来越根深…

大模型训练流程(一)预训练

预训练GPU内存分析: GPU占用内存 模型权重 梯度 优化器内存(动量估计和梯度方差) 中间激活值*batchsize GPU初始化内存 训练流程 (选基座 —> 扩词表 —> 采样&切分数据 —> 设置学习参数 —> 训练 —>…

什么是美颜SDK?美颜SDK在短视频平台中的作用探究

在这个以视频为主导的平台上,美颜技术在其中扮演了不可或缺的角色。本文将探讨美颜SDK的本质,以及它在短视频平台中所发挥的作用。 一、什么是美颜SDK? 美颜SDK是一种软件开发工具包,其主要功能是通过算法对图像进行美化处理。…

【教3妹学编程-算法题】人员站位的方案数 II

2哥 : 3妹,今天第一天上班啊,开工大吉~ 3妹:2哥,开工大吉鸭,有没有开工红包? 2哥 : 我们公司比较扣,估计不会发的。 3妹:我们公司估计也一样,不过依然挡不住我打工人的热…

HarmonyOS router页面跳转

默认启动页面index.ets import router from ohos.router import {BusinessError} from ohos.baseEntry Component struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加按钮&am…