数字信息摘要常见算法

简介: 编解码算法 1. Hex 编码 将二进制数据按16进制转换为字符串,1字节=2个字符,编码后体积为2倍。 2. Base64 由MIME规范定义的编码算法,其将3个字节(24位)编码为4个字符。 字符集包括64个,可表示6二进制位的数据,因此一个字符对应一组6bit的数据。

编解码算法

1. Hex 编码 
将二进制数据按16进制转换为字符串,1字节=2个字符,编码后体积为2倍。

2. Base64 
由MIME规范定义的编码算法,其将3个字节(24位)编码为4个字符。 
字符集包括64个,可表示6二进制位的数据,因此一个字符对应一组6bit的数据。 
编码后体积约为4/3倍,针对不足位数用=补齐。

HASH 算法

通常也称散列算法,是一种将任意长度的消息变成固定长度的消息摘要算法,不可逆;

1 MD5 
Message Digest Algorithm 5,流行度极高,但目前被发现存在碰撞冲突风险; 
任意长度输出为128bit=16字节摘要

2 SHA1 
SHA 指Security Hash Algorithm,由美国国家安全局NSA设计的安全散列算法系列; 
SHA1 输出长度为160bit=20字节摘要

3 SHA256 
继SHA1 出现的算法(属于SHA-2类),安全性较SHA1更高; 
SHA256 输出长度为256bit=32字节摘要。

MAC 算法

Message Authentication Code,消息认证码算法,基于HASH算法之上,增加了密钥的支持以提高安全性。 
具体算法包括HmacMD5/HmacSHA1/HmacSHA256等,输入包括数据及密钥,输出长度与HASH算法一致。 
密钥可以是任意长度的数据。

代码样例

HEX 编解码

    /**
     * Write a byte array as hexadecimal String.
     */
    public static String byteToHexString(byte[] bytes) {
        return String.valueOf(Hex.encodeHex(bytes));
    }
    /**
     * Transform an hexadecimal String to a byte array.
     */
    public static byte[] hexStringToByte(String hexString) {
        try {
            return Hex.decodeHex(hexString.toCharArray());
        } catch (DecoderException e) {
            throw new RuntimeException(e);
        }
    }  

// Hex 来自 common-codec 扩展包
// 字节编码片段
    private static final char[] DIGITS_LOWER =
        {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};  
    /**
     * @param data
     *            a byte[] to convert to Hex characters

     * @return A char[] containing hexadecimal characters
     * @since 1.4
     */
    protected static char[] encodeHex(final byte[] data) {
        final int l = data.length;
        final char[] out = new char[l << 1];
        // two characters form the hex value.
        for (int i = 0, j = 0; i < l; i++) {
            out[j++] = DIGITS_LOWER [(0xF0 & data[i]) >>> 4];
            out[j++] = DIGITS_LOWER [0x0F & data[i]];
        }
        return out;
    }  

 

Base64编解码

    /**
     * Encode a String to base64
     * 
     * @param value
     *            The plain String
     * @return The base64 encoded String
     */
    public static String encodeBASE64(String value) {
        try {
            return new String(Base64.encodeBase64(value.getBytes("utf-8")));
        } catch (UnsupportedEncodingException ex) {
            throw new RuntimeException(ex);
        }
    }
    /**
     * Decode a base64 value
     * 
     * @param value
     *            The base64 encoded String
     * @return decoded binary data
     */
    public static byte[] decodeBASE64(String value) {
        try {
            return Base64.decodeBase64(value.getBytes("utf-8"));
        } catch (UnsupportedEncodingException ex) {
            throw new RuntimeException(ex);
        }
    } 

 

MD5 实现(SHA1、SHA256类似)

    /**
     * Build an hexadecimal MD5 hash for a String
     * 
     * @param value
     *            The String to hash
     * @return An hexadecimal Hash
     */
    public static String hexMD5(String value) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.reset();
            messageDigest.update(value.getBytes("utf-8"));
            byte[] digest = messageDigest.digest();
            return byteToHexString(digest);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    } 

 

MAC 计算摘要

static {
        // add bouncycastle support for md4 etc..
        Security.addProvider(new BouncyCastleProvider());
    }
    /**
     * 初始化密钥
     * 
     * @param type
     * @return
     */
    public static String initHmacKey(MacType type) {
        try {
            KeyGenerator generator = KeyGenerator.getInstance(type.name());
            SecretKey secretKey = generator.generateKey();
            byte[] key = secretKey.getEncoded();
            return Codec.byteToHexString(key);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 计算HMAC摘要
     * 
     * @param data
     * @param key
     * @param type
     * @return
     */
    public static String computeHmac(byte[] data, String key, MacType type) {
        try {
            byte[] keydata = Codec.hexStringToByte(key);
            SecretKey secretKey = new SecretKeySpec(keydata, type.name());
            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
            mac.init(secretKey);
            byte[] digest = mac.doFinal(data);
            return Codec.byteToHexString(digest);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }  

 

bouncycastle 支持

maven 依赖

        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.54</version>
        </dependency> 

 

http://www.bouncycastle.org/

img_9b09a36f6de95886f52ce82fa1e89c88.jpe

作者: zale

出处: http://www.cnblogs.com/littleatp/, 如果喜欢我的文章,请关注我的公众号

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接  如有问题, 可留言咨询.

目录
相关文章
|
3月前
|
算法 数据安全/隐私保护
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
本项目实现了一种基于Logistic Map混沌序列的数字信息加解密算法,使用MATLAB2022A开发并包含GUI操作界面。支持对文字、灰度图像、彩色图像和语音信号进行加密与解密处理。核心程序通过调整Logistic Map的参数生成伪随机密钥序列,确保加密的安全性。混沌系统的不可预测性和对初值的敏感依赖性是该算法的核心优势。示例展示了彩色图像、灰度图像、语音信号及文字信息的加解密效果,运行结果清晰准确,且完整程序输出无水印。
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
|
3月前
|
算法 5G 定位技术
高低频混合组网系统中基于地理位置信息的信道测量算法matlab仿真
本内容展示了一种基于地理位置信息的信道测量算法,适用于现代蜂窝系统,尤其在毫米波通信中,波束对准成为关键步骤。算法通过信号传播模型和地理信息实现信道状态测量,并优化误差提升准确性。完整程序基于Matlab2022a运行,无水印效果,核心代码配有中文注释及操作视频,适合深入学习与应用开发。
国家互联网信息办公室关于发布第十批深度合成服务算法备案信息的公告
2025年3月12日,国家网信办公布第十批深度合成算法备案信息,共395款算法通过公示。根据《互联网信息服务深度合成管理规定》,境内深度合成服务提供者和技术支持者需履行备案手续。具体信息可在中国互联网信息服务算法备案系统查询,疑议请发邮件至指定邮箱。附件含完整备案清单。
|
7月前
|
算法 数据安全/隐私保护
基于信息论的高动态范围图像评价算法matlab仿真
本项目基于信息论开发了一种高动态范围(HDR)图像评价算法,并通过MATLAB 2022A进行仿真。该算法利用自然图像的概率模型,研究图像熵与成像动态范围的关系,提出了理想成像动态范围的计算公式。核心程序实现了图像裁剪处理、熵计算等功能,展示了图像熵与动态范围之间的关系。测试结果显示,在[μ-3σ, μ+3σ]区间内图像熵趋于稳定,表明系统动态范围足以对景物成像。此外,还探讨了HDR图像亮度和对比度对图像质量的影响,为HDR图像评价提供了理论基础。
|
12月前
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
291 0
|
算法 JavaScript 前端开发
消息摘要算法:MD5加密
消息摘要算法:MD5加密
229 1
|
算法 安全 数据安全/隐私保护
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
|
存储 算法 算法框架/工具
基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序
该文档介绍了在一个FPGA项目中使用HSV色彩模型提取图像深度信息的过程。通过将RGB图像转换为HSV,然后利用明度与深度的非线性映射估计深度。软件版本为Vivado 2019.2和MATLAB 2022a。算法在MATLAB中进行了对比测试,并在FPGA上实现了优化,包括流水线并行处理和查找表技术。提供的Verilog代码段展示了RGB到灰度的转换。实验结果和核心程序的图片未显示。
|
网络协议 算法 数据库
【专栏】IS-IS协议是内部网关协议,常用于大型网络路由器间的路由信息交换,基于OSI的CLNP标准和Dijkstra算法
【4月更文挑战第28天】IS-IS协议是内部网关协议,常用于大型网络路由器间的路由信息交换,基于OSI的CLNP标准和Dijkstra算法。其特点是分层设计、快速收敛、高效资源利用和强故障恢复能力。在现代网络中,IS-IS广泛应用于服务提供商、企业网络及与其他协议的融合,是构建稳定、高效网络的关键。了解和应用IS-IS能提升网络系统的可靠性和效率。
376 0
|
存储 算法 安全
软件体系结构 - 摘要算法
软件体系结构 - 摘要算法
117 0

热门文章

最新文章