`

消息摘要算法-MAC算法系列

 
阅读更多

一、简述

  mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。关于hmac算法的详情可以参看RFC 2104(http://www.ietf.org/rfc/rfc2104.txt),这里包含了HmacMD5算法的C语言实现。

  这里需要说明的是经过mac算法得到的摘要值也可以使用十六进制编码表示,其摘要值得长度与实现算法的摘要值长度相同。例如 HmacSHA算法得到的摘要长度就是SHA1算法得到的摘要长度,都是160位二进制数,换算成十六进制的编码为40位。

 

二、模型分析

甲乙双方进行数据交换可以采取如下流程完成

1、甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)

2、甲乙双方按照约定构造密钥,双方拥有相同的密钥(一般是一方构造密钥后通知另外一方,此过程不需要通过程序实现,就是双方约定个字符串,但是这个字符串可不是随便设定的,也是通过相关算法获取的)

3、甲方使用密钥对消息做摘要处理,然后将消息和生成的摘要消息一同发送给乙方

4、乙方收到消息后,使用甲方已经公布的摘要算法+约定好的密钥 对收到的消息进行摘要处理。然后比对自己的摘要消息和甲方发过来的摘要消息。甄别消息是否是甲方发送过来的

 

三、MAC系列算法支持表

 

算法 摘要长度 备注
HmacMD5 128 JAVA6实现
HmacSHA1 160 JAVA6实现
HmacSHA256 256 JAVA6实现
HmacSHA384 384 JAVA6实现
HmacSHA512 512 JAVA6实现
HmacMD2 128 BouncyCastle实现
HmacMD4 128 BouncyCastle实现
HmacSHA224 224 BouncyCastle实现

 

四、sun以及bouncycastle的hmac算法实现

 

import java.security.Security;  
import javax.crypto.KeyGenerator;  
import javax.crypto.Mac;  
import javax.crypto.SecretKey;  
import javax.crypto.spec.SecretKeySpec;  
import org.bouncycastle.jce.provider.BouncyCastleProvider;  
import org.bouncycastle.util.encoders.Hex;  
/** 
 * MAC消息摘要组件 
 * @author kongqz 
 * */  
public class MACCoder {  
///////////////////////////HmacMD5///////////////////////////////  
    /** 
     * 初始化HmacMD5的密钥 
     * @return byte[] 密钥 
     *  
     * */  
    public static byte[] initHmacMD5Key() throws Exception{  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacMD5");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacMD5消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacMD5(byte[] data,byte[] key) throws Exception{  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacMD5");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
      
///////////////////////////////HmacSHA1//////////////////////////////////  
    /** 
     * 初始化HmacSHA1的密钥 
     * @return byte[] 密钥 
     *  
     * */  
    public static byte[] initHmacSHAKey() throws Exception{  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA1");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacSHA1消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacSHA(byte[] data,byte[] key) throws Exception{  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacSHA1");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
      
///////////////////////////////HmacSHA256//////////////////////////////////  
    /** 
     * 初始化HmacSHA256的密钥 
     * @return byte[] 密钥 
     *  
     * */  
    public static byte[] initHmacSHA256Key() throws Exception{  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA256");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacSHA256消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacSHA256(byte[] data,byte[] key) throws Exception{  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacSHA256");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
      
///////////////////////////////HmacSHA384//////////////////////////////////  
    /** 
     * 初始化HmacSHA384的密钥 
     * @return byte[] 密钥 
     *  
     * */  
    public static byte[] initHmacSHA384Key() throws Exception{  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA384");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacSHA384消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacSHA384(byte[] data,byte[] key) throws Exception{  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacSHA384");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
      
///////////////////////////////HmacSHA512//////////////////////////////////  
    /** 
     * 初始化HmacSHA512的密钥 
     * @return byte[] 密钥 
     *  
     * */  
    public static byte[] initHmacSHA512Key() throws Exception{  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA512");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacSHA512消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacSHA512(byte[] data,byte[] key) throws Exception{  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacSHA512");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
///////////////////////////////HmacMD2-BouncyCastle才支持的实现//////////////////////////////////  
    /** 
     * 初始化HmacMD2的密钥 
     * @return byte[] 密钥 
     * */  
    public static byte[] initHmacMD2Key() throws Exception{  
          
        //加入BouncyCastleProvider的支持  
        Security.addProvider(new BouncyCastleProvider());  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacMD2");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacMD2消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacMD2(byte[] data,byte[] key) throws Exception{  
        //加入BouncyCastleProvider的支持  
        Security.addProvider(new BouncyCastleProvider());  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacMD2");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
    /** 
     * HmacMD2Hex消息摘要 
     * @param data 待做消息摘要处理的数据 
     * @param String 密钥 
     * @return byte[] 消息摘要 
     * */  
    public static String encodeHmacMD2Hex(byte[] data,byte[] key) throws Exception{  
        //执行消息摘要处理  
        byte[] b=encodeHmacMD2(data,key);  
        //做十六进制转换  
        return new String(Hex.encode(b));  
    }  
      
///////////////////////////////HmacMD4-BouncyCastle才支持的实现//////////////////////////////////  
    /** 
     * 初始化HmacMD2的密钥 
     * @return byte[] 密钥 
     * */  
    public static byte[] initHmacMD4Key() throws Exception{  
          
        //加入BouncyCastleProvider的支持  
        Security.addProvider(new BouncyCastleProvider());  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacMD4");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacMD4消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacMD4(byte[] data,byte[] key) throws Exception{  
        //加入BouncyCastleProvider的支持  
        Security.addProvider(new BouncyCastleProvider());  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacMD4");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
    /** 
     * HmacMD4Hex消息摘要 
     * @param data 待做消息摘要处理的数据 
     * @param String 密钥 
     * @return byte[] 消息摘要 
     * */  
    public static String encodeHmacMD4Hex(byte[] data,byte[] key) throws Exception{  
        //执行消息摘要处理  
        byte[] b=encodeHmacMD4(data,key);  
        //做十六进制转换  
        return new String(Hex.encode(b));  
    }  
///////////////////////////////HmacSHA224-BouncyCastle才支持的实现//////////////////////////////////  
    /** 
     * 初始化HmacSHA224的密钥 
     * @return byte[] 密钥 
     * */  
    public static byte[] initHmacSHA224Key() throws Exception{  
          
        //加入BouncyCastleProvider的支持  
        Security.addProvider(new BouncyCastleProvider());  
        //初始化KeyGenerator  
        KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA224");  
        //产生密钥  
        SecretKey secretKey=keyGenerator.generateKey();  
        //获取密钥  
        return secretKey.getEncoded();  
    }  
    /** 
     * HmacSHA224消息摘要 
     * @param data 待做摘要处理的数据 
     * @param key 密钥 
     * @return  byte[] 消息摘要 
     * */  
    public static byte[] encodeHmacSHA224(byte[] data,byte[] key) throws Exception{  
        //加入BouncyCastleProvider的支持  
        Security.addProvider(new BouncyCastleProvider());  
        //还原密钥,因为密钥是以byte形式为消息传递算法所拥有  
        SecretKey secretKey=new SecretKeySpec(key,"HmacSHA224");  
        //实例化Mac  
        Mac mac=Mac.getInstance(secretKey.getAlgorithm());  
        //初始化Mac  
        mac.init(secretKey);  
        //执行消息摘要处理  
        return mac.doFinal(data);  
    }  
    /** 
     * HmacSHA224Hex消息摘要 
     * @param data 待做消息摘要处理的数据 
     * @param String 密钥 
     * @return byte[] 消息摘要 
     * */  
    public static String encodeHmacSHA224Hex(byte[] data,byte[] key) throws Exception{  
        //执行消息摘要处理  
        byte[] b=encodeHmacSHA224(data,key);  
        //做十六进制转换  
        return new String(Hex.encode(b));  
    }  
    /** 
     * 进行相关的摘要算法的处理展示 
     * @throws Exception  
     * **/  
    public static void main(String[] args) throws Exception {  
        String str="HmacMD5消息摘要";  
        //初始化密钥  
        byte[] key1=MACCoder.initHmacMD5Key();  
        //获取摘要信息  
        byte[] data1=MACCoder.encodeHmacMD5(str.getBytes(), key1);  
          
        System.out.println("原文:"+str);  
        System.out.println();  
        System.out.println("HmacMD5的密钥:"+key1.toString());  
        System.out.println("HmacMD5算法摘要:"+data1.toString());  
        System.out.println();  
          
        //初始化密钥  
        byte[] key2=MACCoder.initHmacSHA256Key();  
        //获取摘要信息  
        byte[] data2=MACCoder.encodeHmacSHA256(str.getBytes(), key2);  
        System.out.println("HmacSHA256的密钥:"+key2.toString());  
        System.out.println("HmacSHA256算法摘要:"+data2.toString());  
        System.out.println();  
          
          
        //初始化密钥  
        byte[] key3=MACCoder.initHmacSHAKey();  
        //获取摘要信息  
        byte[] data3=MACCoder.encodeHmacSHA(str.getBytes(), key3);  
        System.out.println("HmacSHA1的密钥:"+key3.toString());  
        System.out.println("HmacSHA1算法摘要:"+data3.toString());  
        System.out.println();  
          
          
        //初始化密钥  
        byte[] key4=MACCoder.initHmacSHA384Key();  
        //获取摘要信息  
        byte[] data4=MACCoder.encodeHmacSHA384(str.getBytes(), key4);  
        System.out.println("HmacSHA384的密钥:"+key4.toString());  
        System.out.println("HmacSHA384算法摘要:"+data4.toString());  
        System.out.println();  
          
          
        //初始化密钥  
        byte[] key5=MACCoder.initHmacSHA512Key();  
        //获取摘要信息  
        byte[] data5=MACCoder.encodeHmacSHA512(str.getBytes(), key5);  
        System.out.println("HmacSHA512的密钥:"+key5.toString());  
        System.out.println("HmacSHA512算法摘要:"+data5.toString());  
        System.out.println();  
          
        System.out.println("================以下的算法支持是bouncycastle支持的算法,sun java6不支持=======================");  
        //初始化密钥  
        byte[] key6=MACCoder.initHmacMD2Key();  
        //获取摘要信息  
        byte[] data6=MACCoder.encodeHmacMD2(str.getBytes(), key6);  
        String datahex6=MACCoder.encodeHmacMD2Hex(str.getBytes(), key6);  
        System.out.println("Bouncycastle HmacMD2的密钥:"+key6.toString());  
        System.out.println("Bouncycastle HmacMD2算法摘要:"+data6.toString());  
        System.out.println("Bouncycastle HmacMD2Hex算法摘要:"+datahex6.toString());  
        System.out.println();  
          
        //初始化密钥  
        byte[] key7=MACCoder.initHmacMD4Key();  
        //获取摘要信息  
        byte[] data7=MACCoder.encodeHmacMD4(str.getBytes(), key7);  
        String datahex7=MACCoder.encodeHmacMD4Hex(str.getBytes(), key7);  
        System.out.println("Bouncycastle HmacMD4的密钥:"+key7.toString());  
        System.out.println("Bouncycastle HmacMD4算法摘要:"+data7.toString());  
        System.out.println("Bouncycastle HmacMD4Hex算法摘要:"+datahex7.toString());  
        System.out.println();  
          
        //初始化密钥  
        byte[] key8=MACCoder.initHmacSHA224Key();  
        //获取摘要信息  
        byte[] data8=MACCoder.encodeHmacSHA224(str.getBytes(), key8);  
        String datahex8=MACCoder.encodeHmacSHA224Hex(str.getBytes(), key8);  
        System.out.println("Bouncycastle HmacSHA224的密钥:"+key8.toString());  
        System.out.println("Bouncycastle HmacSHA224算法摘要:"+data8.toString());  
        System.out.println("Bouncycastle HmacSHA224算法摘要:"+datahex8.toString());  
        System.out.println();  
    }  
}  

 

原文:HmacMD5消息摘要

HmacMD5的密钥:[B@f3d6a5
HmacMD5算法摘要:[B@911f71

HmacSHA256的密钥:[B@1b10d42
HmacSHA256算法摘要:[B@dd87b2

HmacSHA1的密钥:[B@1a0c10f
HmacSHA1算法摘要:[B@e2eec8

HmacSHA384的密钥:[B@67ac19
HmacSHA384算法摘要:[B@53ba3d

HmacSHA512的密钥:[B@1813fac
HmacSHA512算法摘要:[B@7b7072

================以下的算法支持是bouncycastle支持的算法,sun java6不支持=======================
Bouncycastle HmacMD2的密钥:[B@1e4457d
Bouncycastle HmacMD2算法摘要:[B@18e2b22
Bouncycastle HmacMD2Hex算法摘要:103403efad9df90180d9c5528060950e

Bouncycastle HmacMD4的密钥:[B@efd552
Bouncycastle HmacMD4算法摘要:[B@19dfbff
Bouncycastle HmacMD4Hex算法摘要:9afc6aba973434b4092c9c4840dd0e41

Bouncycastle HmacSHA224的密钥:[B@16cd7d5
Bouncycastle HmacSHA224算法摘要:[B@cdedfd
Bouncycastle HmacSHA224算法摘要:293398d4bb063705dd2007be210022f40f34fb445fe4c1318ce4a550

 

五、总结

 

1、sun支持了5中算法,但是不支持转成16进制,但是可以用commons codec或者bouncycastle的16进制转换协助进行转换

2、bouncycastle支持补充了三种算法,并支持16进制转换

分享到:
评论

相关推荐

    java加密算法:Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法

    java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...

    加密算法模块(VC++)-算法源码吧-加密解密算法- C_C++

    5. **消息认证码(MAC)**:如HMAC(Hash-based Message Authentication Code),结合了哈希函数和密钥,用于验证数据的完整性和来源。 这些源码可以帮助开发者更好地理解各种加密机制的工作原理,并在实际项目中...

    常见的MAC算法(PBOC_3DES_MAC、ANSI X9.9MAC算法、ANSI x9.19算法)

    本篇文章将深入探讨三种常见的MAC算法:PBOC_3DES_MAC、ANSI X9.9 MAC算法以及ANSI X9.19 MAC算法,并通过提供的Java源码文件(DesUtils.java、ANSIMacUtils.java、Pboc3DesMACUtils.java)来解析它们的实现细节。...

    Java加密 消息摘要算法MAC实现详解

    本文详解了Java中消息摘要算法MAC(Message Authentication Code)的实现方法,这是消息摘要算法的第三种实现方式,前两种分别是MD2、MD4、MD5以及SHA系列算法。消息摘要算法主要用于确保信息传输完整性和认证,MAC...

    AES加密算法以及MAC生成

    消息认证码(Message Authentication Code,MAC)是一种用于验证数据完整性和来源的机制,它是通过一个密钥和哈希函数生成的固定长度的摘要。MAC与普通的哈希函数不同,因为它需要共享的密钥,这使得只有拥有正确...

    Java消息摘要算法MAC实现与应用完整示例

    Java 消息摘要算法 MAC 实现与应用完整示例 Java 消息摘要算法 MAC(Message Authentication Code)是一种用于数据完整性和身份验证的算法。它可以确保数据的完整性和一致性,防止数据被篡改或伪造。 概念: * ...

    MAC算法之消息摘要算法HmacMD5的实现

    MAC算法之消息摘要算法HmacMD5的实现 MAC(Message Authentication Code,消息验证码)算法是一种常用的消息认证机制,它可以确保消息的完整性和真实性。在实际应用中,MAC算法通常与加密算法结合使用,以确保消息...

    MAC算法小工具

    它通过将一个密钥与消息结合,生成一个固定长度的摘要,这个摘要称为MAC值。MAC算法通常用于网络通信、文件完整性检查以及数据库保护等领域,确保信息在传输过程中没有被篡改或伪造。 在提供的"MAC算法小工具"中,...

    fpexpress消息摘要工具(Mac OS X版)

    03.多算法支持: 提供MD5, SHA系列等十几种消息摘要算法(Microsoft Windows®平台视用户安装选项而定), 可满足绝大多数常规用户的需求 04.多外观支持: 提供系统和jgoodies、substance等二十余种主题(theme)[和/或]...

    基于DES的MAC

    MAC是通过一个密钥和一个消息来生成固定长度的摘要,这个摘要与原始消息绑定,使得任何对消息的修改在计算新的MAC时都会被发现。在本文中,我们将深入探讨DES-MAC的工作原理、特点以及其在实际应用中的重要性。 **...

    fpexpress消息摘要工具(Linux-rpm版)

    03.多算法支持: 提供MD5, SHA系列等十几种消息摘要算法(Microsoft Windows®平台视用户安装选项而定), 可满足绝大多数常规用户的需求 04.多外观支持: 提供系统和jgoodies、substance等二十余种主题(theme)[和/或]...

    fpexpress消息摘要工具(Linux-deb版)

    03.多算法支持: 提供MD5, SHA系列等十几种消息摘要算法(Microsoft Windows®平台视用户安装选项而定), 可满足绝大多数常规用户的需求 04.多外观支持: 提供系统和jgoodies、substance等二十余种主题(theme)[和/或]...

    java 加解密算法(包含摘要算法和数字签名)

    包含java加解密算法(base64,des,3des,aes,pbe,dh,rsa,ElGamal) 包含java摘要算法(md2,md4,md5,sha1,sha2((SHA-224,SHA-256, SHA-384,SHA-512)),mac) 包含签名算法(rsa,dsa,ecdsa)

    数字信息摘要常见算法1

    摘要算法将任意长度的输入(如文本、图片或文件)转换为固定长度的输出,这个输出称为摘要,它具有不可逆性,即不能通过摘要恢复原始信息。以下是几种常见的摘要算法: 1. **Hex编码**: - Hex编码是一种将二进制...

    AES-CMAC源码&官方文档

    AES-CMAC是一种基于AES(Advanced Encryption Standard)的密码消息认证码(MAC)算法,用于确保数据的完整性和来源的真实性。AES是由NIST(美国国家标准与技术研究所)在2001年标准化的一种对称加密算法,它以128位...

    密码学 hash算法实验代码及报告

    哈希算法,也称为散列函数或消息摘要,是一种单向函数,它将任意长度的输入(通常称为预映射或消息)转换为固定长度的输出,这个输出就是哈希值。哈希算法的主要特性包括不可逆性、抗碰撞性和高效性。不可逆性意味着...

    密码学实验(全部题目+完整代码:Hash算法MD5,DES-CBC,基于口令的加密,CBC-MAC,数字信封, 数字签名,DH).zip

    本实验涵盖了多个关键的密码学概念和技术,包括Hash算法的MD5、DES-CBC模式、基于口令的加密、CBC-MAC消息认证码、数字信封、数字签名以及Diffie-Hellman(DH)密钥交换协议。下面将对这些知识点进行详细阐述。 1. ...

    fpexpress消息摘要工具(Windows版)

    03.多算法支持: 提供MD5, SHA系列等十几种消息摘要算法(Microsoft Windows®平台视用户安装选项而定), 可满足绝大多数常规用户的需求 04.多外观支持: 提供系统和jgoodies、substance等二十余种主题(theme)[和/或]...

    多种加密算法

    ### MD5摘要算法 MD5(Message Digest algorithm 5)是一种广泛使用的散列函数,用于生成固定长度的128位(16字节)消息摘要。这种摘要通常用来验证数据的完整性和一致性,例如在网络传输中校验文件是否被篡改。MD5...

    消息认证和杂凑算法[参照].pdf

    接下来,文档中多次提到了MD5(消息摘要算法第五版)。MD5是一种广泛使用的哈希函数,它能够产生出一个128位的哈希值(通常用32位十六进制数表示)。MD5曾经被广泛应用于数据完整性校验,但现在已经不推荐使用,因为...

Global site tag (gtag.js) - Google Analytics