java常用加密算法及MD5的使用

您所在的位置:网站首页 md5是常用的数据加密算法对不对 java常用加密算法及MD5的使用

java常用加密算法及MD5的使用

2024-07-13 22:25| 来源: 网络整理| 查看: 265

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

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

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

最常见的散列算法就是MD5和SHA1,简单介绍一下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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3