马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
安全算法 - 摘要算法
一:摘要算法概述
简介
- 摘要算法属于哈希散列加密算法
- 消息摘要算法的紧张特征是加密过程不需要密钥,而且颠末加密的数据无法被解密
- 只有输入雷同的明文数据颠末雷同的消息摘要算法才华得到雷同的密文
- 消息摘要算法紧张应用在“数字签名”领域,作为对明文的摘要算法
- 著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体
特点
- 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的
- 消息摘要看起来是“伪随机的”。也就是说对雷同的信息求摘要结果雷同
- 消息轻微改变生成的摘要变革会很大
- 只能进行正向的信息摘要,而无法从摘要中规复出任何的消息,乃至根本就找不到任何与原信息相关的信息(单向性)
二:MD5 摘要算法
md5摘要算法具有如下特性
压缩性 : 任意长度的数据,算出的MD5值长度都是固定的(32位16进制)。
容易计算 : 从原数据计算出MD5值很容易。
抗修改性 : 对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
强抗碰撞 : 已知原数据和其MD5值,想找到一个具有雷同MD5值的数据(即伪造数据)是非常困难的
- // java实现MD5加密算法
- import java.security.MessageDigest;
- public class MD5Demo {
- public static void main(String[] args) {
- System.out.println(getMD5Code("你若安好,便是晴天"));
- }
- // md5加密
- public static String getMD5Code(String message) {
- String md5Str = "";
- try {
- //创建MD5算法消息摘要
- MessageDigest md = MessageDigest.getInstance("MD5");
- //生成的哈希值的字节数组
- byte[] md5Bytes = md.digest(message.getBytes());
- // 转换成为16进制
- md5Str = bytes2Hex(md5Bytes);
- }catch(Exception e) {
- e.printStackTrace();
- }
- return md5Str;
- }
- // 2进制转16进制
- public static String bytes2Hex(byte[] bytes) {
- StringBuffer result = new StringBuffer();
- int temp;
- try {
- for (int i = 0; i < bytes.length; i++) {
- temp = bytes[i];
- if(temp < 0) {
- temp += 256;
- }
- if (temp < 16) {
- result.append("0");
- }
- result.append(Integer.toHexString(temp));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return result.toString();
- }
- }
复制代码 三:SHA1摘要算法
对于长度小于2^64位的消息,SHA1会产生一个160位(40个字符)的消息摘要。
当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。
在传输的过程中,数据很可能会发生变革,那么这时候就会产生差别的消息摘要。
SHA1有如下特性:
- 不可以从消息摘要中复原信息(不可逆性)
- 两个差别的消息不会产生同样的消息摘要,(但会有1x1048分之一的机率出现雷同的消息摘要,一般使用时忽略)
- // java实现SHA1算法
- package com.snailclimb.ks.securityAlgorithm;
- import java.io.UnsupportedEncodingException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- public class SHA1Demo {
- public static void main(String[] args) {
- System.out.println(getSha1("你若安好,便是晴天"));
- }
- public static String getSha1(String str) {
- if (null == str || 0 == str.length()) {
- return null;
- }
- char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
- try {
- //创建SHA1算法消息摘要对象
- MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
- //使用指定的字节数组更新摘要。
- mdTemp.update(str.getBytes("UTF-8"));
- //生成的哈希值的字节数组
- byte[] md = mdTemp.digest();
- //SHA1算法生成信息摘要关键过程
- int j = md.length;
- char[] buf = new char[j * 2];
- int k = 0;
- for (int i = 0; i < j; i++) {
- byte byte0 = md[i];
- buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
- buf[k++] = hexDigits[byte0 & 0xf];
- }
- return new String(buf);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return "0";
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |