0

0

Java 详解单向加密-MD5、SHA和HMAC及简单实现示例代码

黄舟

黄舟

发布时间:2017-03-08 10:46:02

|

1745人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了java 详解单向加密--md5、sha和hmac及简单实现实例的相关资料,需要的朋友可以参考下

Java 详解单向加密--MD5、SHA和HMAC及简单实现实例

概要:

MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法。

MD5

立即学习Java免费学习笔记(深入)”;

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。MD5是输入不定长度信息,输出固定长度128-bits的算法。

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的“字节串”映射为一个128bit的大整数,并且通过该128bit反推原始字符串是非常困难的。

SHA

SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然SHA与MD5通过碰撞法都被破解了, 但是SHA仍然是公认的安全加密算法,较之MD5更为安全。

Multiavatar
Multiavatar

Multiavatar是一个免费开源的多元文化头像生成器,可以生成高达120亿个虚拟头像

下载

SHA所定义的长度

下表中的中继散列值(internal state)表示对每个数据区块压缩散列过后的中继值(internal hash sum)。

算法 输出散列值长度(bits) 中继散列值长度(bits) 数据区块长度(bits) 最大输入消息长度(bits) 一个Word长度(bits) 循环次数 使用到的运算符 碰撞攻击
SHA-0 160 160 512 264 − 1 32 80 +,and,or,xor,rotl
SHA-1 160 160 512 264 − 1 32 80 +,and,or,xor,rotl 存在263的攻击
SHA-256/224 256/224 256 512 264 − 1 32 64 +,and,or,xor,shr,rotr 尚未出现
SHA-512/384 512/384 512 1024 2128 − 1 64 80 +,and,or,xor,shr,rotr 尚未出现

HMAC

HMAC(Hash Message Authentication Code),散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

Java示例

package com.zzj.encryption; 
 
import java.security.MessageDigest; 
 
import javax.crypto.Mac; 
import javax.crypto.SecretKey; 
import javax.crypto.spec.SecretKeySpec; 
 
import org.apache.commons.codec.binary.Base64; 
 
/** 
 * 单向加密(非可逆加密) 
 * @author lenovo 
 * 
 */ 
public class OneWayEncryption { 
  static final String ALGORITHM_MD5 = "MD5"; 
  static final String ALGORITHM_SHA = "SHA"; 
  /** 
   * MAC算法可选以下多种算法 
   * 
 
   * HmacMD5 
   * HmacSHA1 
   * HmacSHA256 
   * HmacSHA384 
   * HmacSHA512 
   * 
     */    static final String ALGORITHM_MAC = "HmacMD5";    /** 密钥 **/    static final String MAC_KEY = "abcdef";        public static void main(String[] args) throws Exception {      String source = "我是程序猿!我很骄傲!";      // MD5加密      printBase64(encryptionMD5(source));      // SHA加密      printBase64(encryptionSHA(source));      // HMAC加密      printBase64(encryptionHMAC(source));    }      static void printBase64(byte[] out) throws Exception {      System.out.println(encodeBase64(out));    }      /**     * MD5加密     * @param source     * @return     * @throws Exception     */    static byte[] encryptionMD5(String source) throws Exception {      MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);      md.update(source.getBytes("UTF-8"));      return md.digest();    }        /**     * SHA加密     * @param source     * @return     * @throws Exception     */    static byte[] encryptionSHA(String source) throws Exception {      MessageDigest md = MessageDigest.getInstance(ALGORITHM_SHA);      md.update(source.getBytes("UTF-8"));      return md.digest();    }        /**     * HMAC加密     * @return     * @throws Exception     */    static byte[] encryptionHMAC(String source) throws Exception {      SecretKey secretKey = new SecretKeySpec(MAC_KEY.getBytes("UTF-8"), ALGORITHM_MAC);      Mac mac = Mac.getInstance(ALGORITHM_MAC);      mac.init(secretKey);      mac.update(source.getBytes("UTF-8"));      return mac.doFinal();    }        /**     * base64编码     * @param source     * @return     * @throws Exception     */    static String encodeBase64(byte[] source) throws Exception{      return new String(Base64.encodeBase64(source), "UTF-8");    }    }

结果:

1cNbZhnhFsFV3BFPLA71wA== 
kl5KI61Xq44E/SzSPa2sUntMAEc= 
JF2v/u9td5l8yGAImNvTZw==

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

40

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

50

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

12

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

13

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.1万人学习

C# 教程
C# 教程

共94课时 | 8.1万人学习

Java 教程
Java 教程

共578课时 | 54.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号