热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

消息摘要的三大家族:MD,SHA,MAC

为什么80%的码农都做不了架构师?packagecom.dy.signature;importsun.misc.BASE64Decoder;importsun

为什么80%的码农都做不了架构师?>>>   hot3.png

package com.dy.signature;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;/*** 消息摘要 (想了解更多的加密,解密算法和数字签名实现,请游览本人博客)* 摘要加密算法主要由MD、SHA及MAC加密三个家族 。* 散列函数,就是用散列(Hash)函数来验证数据的完整性。任何消息经过散列函数处理后,都会获得唯一的散列值。* 这一过程称为“消息摘要”,其散列值称为“数字指纹”,自然其算法就是“消息摘要算法”。** MD5、SHA以及HMAC是单向加密,任何数据加密后只会产生唯一的一个加密串,通常用来校验数据在传输过程中是否被修改。* 其中HMAC算法有一个密钥,增强了数据传输过程中的安全性,强化了算法外的不可控因素。单向加密的用途主要是为了校验数据在传输过程中是否被修改。* 消息摘要算法主要分为三大类:* MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息认证码算法)。* MD系列算法包括MD2、MD4、MD5共三种算法。* SHA系列算法主要包括SHA-1和SHA-2系列算法(包含SHA-224、SHA-256、SHA-384、SHA-512)* MAC算法综上了两种算法,主要包括HmacMd5、HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512算法。* 基于这些算法,又衍生出了RipeMd系列算法(包含RipeMd128、RipeMd160、RipeMd320)、Tiger、GOST3411和Whirlpool算法。** HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。* 消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个 标识鉴别消息的完整性。* 使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。* 接收方利用与发送方共享的密钥进行鉴别认证 等**/
public class MessageDigestDemo {public static String beforeDegist = "abcdef";public static byte[] digestMD() throws Exception {MessageDigest md = MessageDigest.getInstance("MD5");md.update(beforeDegist.getBytes());return md.digest(beforeDegist.getBytes("UTF8")); //返回摘要}public static byte[] digestSHA() throws Exception {MessageDigest md = MessageDigest.getInstance("SHA");md.update(beforeDegist.getBytes());return md.digest(beforeDegist.getBytes("UTF8")); //返回摘要}/*** MAC算法代码* 生成秘钥** @return* @throws Exception*/public static String secretKey() throws Exception {//初始化KeyGeneratorKeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");//生成密钥SecretKey secretKey = keyGenerator.generateKey();byte[] key = secretKey.getEncoded();System.out.println("加密前的秘钥:" + new String(key));return new BASE64Encoder().encode(key);}/*** MAC算法代码* 生成摘要** @return* @throws Exception*/public static byte[] digestHmac() throws Exception {String s_key = secretKey();byte[] key = new BASE64Decoder().decodeBuffer(s_key);SecretKey secretKey = new SecretKeySpec(key, "HmacMD5");//还原秘钥System.out.println("加密后的秘钥:" + s_key);System.out.println("解密后的秘钥=" + new String(key));System.out.println("还原后的秘钥=" + new String(secretKey.getEncoded()));Mac mac = Mac.getInstance(secretKey.getAlgorithm());mac.init(secretKey);return mac.doFinal(beforeDegist.getBytes("UTF8"));}public static void main(String[] args) throws Exception {System.out.println("md摘要:" + new BASE64Encoder().encode(MessageDigestDemo.digestMD()));System.out.println("SHA摘要:" + new BASE64Encoder().encode(MessageDigestDemo.digestSHA()));System.out.println("Hmac摘要:" + new BASE64Encoder().encode(MessageDigestDemo.digestHmac()));}
}

数字签名可以基于摘要实现!





转:https://my.oschina.net/dyyweb/blog/657846



推荐阅读
  • 加密、解密、揭秘
    谈PHP中信息加密技术同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法?当时我愣了一下,因为我把非对称加密与单项散列加 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 寻求更强大的身份和访问管理(IAM)平台的企业正在转向云,并接受身份即服务(IDaaS)的灵活性。要为IAM选择正确的场外解决方案,业务管理人员和IT专业人员必须在实施之前评估安全 ... [详细]
author-avatar
小妮子831020
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有