前言:工作中经常遇到将数据进行各种方式的加密,然后封装到一个自定义的实体类中作为参数进行传输数据。当然这是为了数据在传输过程中的安全保证,不被其他人轻易的就获取到原数据;

首先,加密解密的概念很简单明了,就是字面意思;加密就是对原来的明文的文件或数据按某种算法进行处理,成为一段不可读的代码,也称为密文;解密就是加密的反过程,将加密后不可读的代码转化成原来的数据;

除了加密解密的概念,还有就是因为加密算法有很多种,总体分为两类:对称加密非对称加密以及散列算法,对称加密就是加密和解密的使用的密钥是相同的,非对称加密中加密和解密时使用的密钥是不同的,散列算法和前面两种就不太相同,它加密是不需要密钥的;

最常见的散列算法就是MD5SHA1,简单介绍一下MD5吧,因为最近也经常用到。

MD5(信息-摘要算法5)

MD5算法是一种哈希函数,就一段信息对应一个哈希值,并且不能通过哈希值推出这段信息,而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。MD5用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

广泛用于加密和解密技术,常用于文件校验。不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验;输入任意长度的信息,经过处理,输出都为128位的信息(数字指纹);

MD5是不可逆的,意思就是它其实没有解密方法的,只能进行加密处理;因为它在hash算法的计算过程中原文的部分信息是丢失了的

这里有篇MD5的详解如果想深入了解的可以看看这篇文章:https://blog.csdn.net/goodnameused/article/details/81068697

SHA1(安全哈希算法)

它的使用方法和md5是相同的,和MD5同样使用的使用hash函数,主要适用于数据子签名标准里面定义的数字签名算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段更小的密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要)的过程。

DES算法

DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度 是 56 位,加密解密 用 同一算法。

DES 加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。

AES算法

AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。

AES 本身就是为了取代 DES 的,AES 具有更好的 安全性、效率 和 灵活性。

RSA算法

RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。

RSA算法基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥

更多算法介绍强烈推荐:https://blog.csdn.net/baidu_22254181/article/details/82594072

下面就直接介绍一下怎么使用吧,毕竟加密解密在工作中一般都是封装好了的,其实最开始简单了解,然后知道怎么用就可以了;

Java已经实现了MD5、SHA1算法。利用java.security.MessageDigest类就可以获取字符串和文件的MD5以及SHA1结果。

最简单的使用方法:

Tools工具类:

import org.apache.commons.codec.digest.DigestUtils;import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class Tools {/*** md5简单使用实现* @param str* @return*/public static String getMD5String(String str) {try {// 生成一个MD5加密计算摘要(如果想使用sha1算法,可以替换成"SHA1")MessageDigest md = MessageDigest.getInstance("MD5");// 计算md5函数md.update(str.getBytes());// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)return new BigInteger(1, md.digest()).toString(16);} catch (Exception e) {e.printStackTrace();return null;}}/*** MD5算法加密 (公司使用)* @param source* @return*/public static String MD5(String source) {System.out.println(source);try {MessageDigest md = MessageDigest.getInstance("MD5");md.update(source.getBytes());byte[] b = md.digest();StringBuffer sb = new StringBuffer();for (byte c : b) {int val = ((int) c) & 0xff;if (val < 16)sb.append("0");sb.append(Integer.toHexString(val));}return sb.toString().toUpperCase();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}/*** MD5算法加盐 (更复杂加密方式)* @param source* @return*/private static final String MD5KEY = "fadsjlfjeohkdfgjlk423211";/*** MD5验证方法* @param text 明文* @return 密文*/public static String MD5encrypt(String text){//加密后的字符串String encodeStr = DigestUtils.md5Hex(text + MD5KEY);return encodeStr;}/*** MD5验证方法* @param text 明文* @param md5 密文* @return true/false*/public static boolean verify(String text, String md5){//根据传入的密钥进行验证String md5Text = MD5encrypt(text);if (md5Text.equalsIgnoreCase(md5)){return true;}return false;}}

测试类:

package com.leejie.md5Test;import com.leejie.utils.Tools;public class MD5Test {private static final String pwd = "aabbcc";public static void main(String[] args) throws Exception {//简单加密System.out.println(Tools.MD5(pwd));//复杂加密String md5Pwd = Tools.MD5encrypt("aabbcc");System.out.println("aabbcc通过密钥加密之后的密文:"+md5Pwd);//项目中使用md5做登录密码验证,加密的密码都是从数据库中取来,和登录输入的密码(密码在验证方法中进行相同的加密)进行对比//验证密码是否正确boolean result = Tools.verify("aabbcc", md5Pwd);System.out.println("验证结果:"+result);}
}

输出:

aabbcc
61A60170273E74A5BE90355FFE8E86AD
aabbcc通过密钥加密之后的密文:fccde86bc3bf351614d27baa5eff75ba
验证结果:true

更详细经典的文章推荐:

https://blog.csdn.net/qq_30683329/article/details/80879058

https://www.cnblogs.com/gaoqing/p/3678039.html

https://blog.csdn.net/u012611878/article/details/54000607

总结

就这样吧,主要是介绍一下md5加密的使用,在平时传输数据或者存储密码时能够会使用就好了,更复杂的非对称加密先了解,等着后面在慢慢详细学习。不早了,明天继续加油!!

下一篇:sync异步的使用

java常用加密算法及MD5的使用相关推荐

  1. Java常用加密算法工具类

    import java.io.IOException; import java.math.BigInteger; import java.security.MessageDigest; import ...

  2. java常用加密算法

    如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorit ...

  3. Java常用消息摘要算法-MD5

    本工具类可实现对字符串或者文件提取MD5值(MD5加密) import java.io.File; import java.io.FileInputStream; import java.io.Inp ...

  4. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA

    1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...

  5. 常用加密算法(Java实现)总结

    1.Java的安全体系架构 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.security 包(及其子包),以及sun.security ...

  6. 常用加密算法的Java实现(一)

    常用加密算法的Java实现(一) --单向加密算法MD5和SHA 摘自:http://www.blogjava.net/amigoxie/archive/2014/06/01/414299.html ...

  7. JAVA 上加密算法的实现用例---转载

    通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman 的使用. 第 1 章基础知识 ...

  8. Hutool Java常用工具类汇总

    简介 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的". Hu ...

  9. JAVA上加密算法的实现用例(转)

    2001 年 7 月 04 日 通常,使用的加密算法 比较简便高效,密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用 ...

最新文章

  1. python time模块计算时长_python time模块详解
  2. 越来越受欢迎的Vue想学么,90后小姐姐今儿来教你
  3. C语言冒泡排序三种写法,冒泡排序的三种实现方法
  4. radius peap mysql_基于Linux Ubuntu的RADIUS服务器搭建
  5. 大数据学习---HIVE入门SQL学习
  6. 卡方检验spss步骤_数据分析--学统计amp;SPSS操作
  7. Decision Tree决策树
  8. 『 论文阅读』Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling
  9. 领域驱动设计DDD:贫血模型和充血模型(比较重要)
  10. mac如何显示隐藏文件
  11. 微信朋友圈分享、QQ分享
  12. 二十年铸就未来视界 HKC让世界认可中国质造
  13. 计算机组成原理偶校验编码设计,计算机组成原理校验码生成电路的设计.doc
  14. C++ 字符串和数字拼接
  15. 图片批量改名,改后缀
  16. 字节跳动2019届校招笔试题
  17. ubuntu16.04安装kinetic ROS记录
  18. 编码员,程序员,黑客,开发人员和计算机科学家走进维恩图
  19. C++学习之路二:C++
  20. 数据社区推荐—恒有数(UData)

热门文章

  1. Matlab/simulink 车辆七自由度平顺性仿真
  2. 计算机专业申请phd美国,美国计算机专业博士的申请个人陈述范文
  3. 防火墙/UTM/安全网关
  4. window7,onlyoffice离线安装教程
  5. 免费的SVG在线编辑器大推荐
  6. 使用telnet登录服务器
  7. 笔记本通过串口连接交换机进行配置
  8. 如何使用CocoaPods?
  9. 2020年1月2日 林大OJ习题 暴力枚举
  10. 小米在Docker上最佳实践:5个方法精简镜像