常见的信息摘要和加密算法(原理+使用)

本文介绍了信息摘要和加密算法,包括MD5的特性与Base64的区别,SHA系列算法,HMAC的安全加强,对称加密如DES、3DES、AES,以及非对称加密的RSA和ECDHE。重点讨论了这些算法在数据完整性保护和密码学中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


散列(Hash)算法


MD5

MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以将任意数据产生出一个128位(16字节)的散列值,用于确保信息传输完整一致。

可以在登录注册模块使用MD5加密用户的密码再存入数据库,防止有人直接从数据库获取用户信息。

MD5算法有以下特点:

  • 压缩性:无论数据长度是多少,计算出来的MD5值长度相同
  • 容易计算性:由原数据容易计算出MD5值
  • 抗修改性:即便修改一个字节,计算出来的MD5值也会巨大差异
  • 抗碰撞性:知道数据和MD5值,很小概率找到相同MD5值相同的原数据。
import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class TestMD5 {
   
    public static String getMD5(String str){
   
        MessageDigest messageDigest = null;
        try {
   
            messageDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
   
            e.printStackTrace();
        }
        byte[] bytes = messageDigest.digest(str.getBytes());
        System.out.println(bytes.length); //16字节 128bit
        return HexBin.encode(bytes); //结果是32位16进制
    }
}

MD5是一种信息摘要算法,不可逆的算法,只能说是单向加密的算法。


MD5和Base64

提到MD5可能也会想到Base64。

Base64是用文本表示二进制的编码方式,使用4个字节的文本来表示3个字节的原始二进制数据。

它将二进制数据转换成一个64个可打印的字符组成的序列。

Base64常用于网络传输,在某些基于文本的协议中,如果需要传输图片或文件等,比如说图片的存储格式是二进制数据而不是文本格式,必须要将二进制的数据编码成文本格式,这时候就可以使用Base64。

某些系统只能使用ASCII字符,Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方式。

Base64编码后一般比原数据要大。

Base64只是一种数据编码格式,是可逆的,而且编码方式是公开的,就不存在加密一说了。


SHA系列

安全散列算法(Secure Hash Algorithm,SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。
能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

也就是说SHA-1加密算法有碰撞的可能性,虽然很小。

SHA256都会产生一个256bit长的散列值(哈希值),用于确保信息传输完整一致,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。

public static String getSHA256(String str){
   
        MessageDigest messageDigest = null;
        try {
   
            messageDigest = MessageDigest.getInstance("SHA-256");
        } catch (NoSuchAlgorithmException e) {
   
            e.printStackTrace();
        }
        byte[] bytes = messageDigest.digest(str.getBytes());
        return HexBin.encode(bytes);
}

HMAC系列

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,它可以与任何迭代散列函数捆绑使用。

MAC(Message Authentication Code,消息认证码算法)是含有密钥的散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加入了密钥。消息的散列值由只有通信双方知道的秘密密钥K来控制,因次,我们也常把MAC称为HMAC(keyed-Hash Message Authentication Code)。

HMAC算法更像是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的Hash算法

public static String getHMAC(String str, SecretKeySpec secretKey){
   
        Mac mac = null;
        try {
   
            mac = Mac.getInstance("HmacSHA256");
        } catch (NoSuchAlgorithmException e) {
   
            e.printStackTrace();
        }
        try {
   
            //初始化mac
            mac.init(secretKey);
        } catch (InvalidKeyException e) {
   
            e.printStackTrace();
        }
        byte[] bytes = mac.doFinal(str.getBytes());
        return new String(Base64.encode(bytes));
}

如果要使用不可逆加密,推荐使用SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512这几种算法。

在这里插入图片描述


对称加密算法


对称加密算法是应用比较早的算法,在数据加密和解密的时用的都是同一个密钥。

常见的对称加密算法有DES、3DES、AES128、AES192、AES256 其中AES后面的数字代表的是密钥长度。对称加密算法的安全性相对较低,比较适用的场景就是内网环境中的加解密。


DES

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。

DES是对称加密算法领域中的典型算法,其密钥默认长度为56位。

DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。
密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值