数据摘要算法(信息摘要)是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于算法具有其不可逆性,有时候也会被用做敏感信息加密。
消息摘要算法(杂凑算法,哈希算法)的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。
一般地,把对一个信息的摘要称为该消息的指纹或数字签名,信息摘要算法的主要用途是 信息完整性校验 ,就好比我们接到一个快递,肯定都会先确定快递包装是否完整,有没有被人打开过,里面的东东有没有被人动过。
在计算机领域,我们也希望能知道别人传递的消息是否完整、是否有被篡改,这里就用到信息摘要算法。
举例:我们传递 password 时,需要将 password 加 salt 后做信息摘要,接收方核对摘要,相同则接受处理,不相同则认为本次的 password 传输过程中被篡改,拒绝本次请求。
信息摘要算法来源于 CRC算法 ,最初 CRC算法 是用来验证数据完整性的,即我们常见的 奇偶校验码 、 循环冗余校验 ,在CRC基础上发展出了MD和SHA两大算法家族,CRC比这些算法都要早,MD算法比SHA算法早,SHA算法是对MD算法的改进。再后来则发展出了可以带有密码的信息摘要算法- MAC算法 。
信息摘要算法包括三大类,MD、SHA和MAC算法,MD的分类是按照版本规定的,SHA一般是按照产生的消息长度分类的,但是SHA系列算法在学术上会按照算法版本区分SHA-0、SHA-1、SHA-2、SHA-3,
MAC算法是Hmac加融合的其他算来命名的。
下表是主要的信息摘要算法的特点比较,关于MD5、SHA1等算法的具体过程,非安全、算法专业人士可不学习,如有需要可以参考下面的维基百科:
美国对于算法出口有着严格的限制,Sun公司(现在应该是甲骨文了)限于美国算法出口法律的限制和本身的一些原因,并有提供特别全面的算法支持,不过java的加密模块被设计为:以SPI方式提供算法具体实现,可以用来透明的接入其他算法供应商,通过SPI机制可以直接使用其他算法供应商的jar包工具。
在Java中主要的算法供应商有三类:Sun本身的算法,包含在JDK中,大部分在JDK 16之后,Bouncy Castle和Commons Codec。
方法一:从控制台接收一个字符,然后将其打印出来
public static void main(String [] args) throws IOException{
Systemoutprint(“Enter a Char:”);
char i = (char) Systeminread();
Systemoutprintln(“your char is :”+i);
}
}
虽然此方式实现了从键盘获取输入的字符,但是Systemoutread()只能针对一个字符的获取,同时,获取进来的变量的类型只能是char,当我们输入一个数字,希望得到的也是一个整型变量的时候,我们还得修改其中的变量类型,这样就显得比较麻烦。
方法二:从控制台接收一个字符串,然后将其打印出来。在这个题目中,我们需要用到BufferedReader类和InputStreamReader类
public static void main(String [] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(Systemin));
String str = null;
Systemoutprintln(“Enter your value:”);
str = brreadLine();
Systemoutprintln(“your value is :”+str);
}
这样我们就能获取我们输入的字符串。
方法三:这种方法我认为是最简单,最强大的,就是用Scanner类
public static void main(String [] args) {
Scanner sc = new Scanner(Systemin);
Systemoutprintln(“请输入你的姓名:”);
String name = scnextLine();
Systemoutprintln(“请输入你的年龄:”);
int age = scnextInt();
Systemoutprintln(“请输入你的工资:”);
float salary = scnextFloat();
Systemoutprintln(“你的信息如下:”);
Systemoutprintln(“姓名:”+name+“\n”+“年龄:”+age+“\n”+“工资:”+salary);
}
这段代码已经表明,Scanner类不管是对于字符串还是整型数据或者float类型的变量,只需做一点小小的改变,就能够实现功能!无疑他是最强大的!
属于重点,在系统中用到注解权限时非常有用,可以精确控制权限的粒度
注意:要想使用反射去读取注解,必须将Retention的值选为Runtime Java代码import javalangannotationAnnotation;import javalangreflectMethod;//读取注解信息public class ReadAnnotationInfoTest { public static void main(String[] args) throws Exception { // 测试AnnotationTest类,得到此类的类对象 Class c = ClassforName(comiwtxokhtdannotationAnnotationTest); // 获取该类所有声明的方法 Method[] methods = cgetDeclaredMethods(); // 声明注解集合 Annotation[] annotations; // 遍历所有的方法得到各方法上面的注解信息 for (Method method : methods) { // 获取每个方法上面所声明的所有注解信息 annotations = methodgetDeclaredAnnotations(); // 再遍历所有的注解,打印其基本信息 Systemoutprintln(methodgetName()); for (Annotation an : annotations) { Systemoutprintln(方法名为: + methodgetName() + 其上面的注解为: + anannotationType()getSimpleName()); Method[] meths = anannotationType()getDeclaredMethods(); // 遍历每个注解的所有变量 for (Method meth : meths) { Systemoutprintln(注解的变量名为: + methgetName()); } } } }}
以上就是关于1.1 信息摘要算法简介全部的内容,包括:1.1 信息摘要算法简介、你好,我想请问那你一下如何在Java点击按钮获取组件输入的信息啊、Java 注解的读取注解信息的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)