【日常记录-Java】SHA-256签名应用

Author:赵志乾
Date:2024-07-29
Declaration:All Right Reserved!!!

1. 简介

        SHA-256(Secure Hash Algorithm 256-bit)是一种广泛使用的密码学哈希函数,其能够将任意长度的数据转换成固定长度(256位,即32字节)的哈希值,通常以64个十六进制数的形式呈现。该算法因高安全性和广泛的应用领域而备受推崇,工作原理如下:

  • 数据预处理:将原始数据转换为位字符串,并进行填充(先在数据末尾添加一个1,然后填足够的0),确保数据长度对512取模后的余数位448,之后在数据末尾附加一个64位的表示原始数据长度的二进制数;
  • 分组处理:将预处理后的数据分为多个512位的分组,对每个分组进行一系列处理;
  • 哈希值生成:通过一系列迭代和压缩操作,逐步生成最终的256位哈希值;

2. 代码示例

public static String generateSHA256(String input) {  
    try {  
        // 创建一个MessageDigest实例,初始化为SHA-256算法对象  
        MessageDigest md = MessageDigest.getInstance("SHA-256");  
        // 使用指定的字节更新摘要,这里需要指定字符集编码,默认为平台默认字符集  
        md.update(input.getBytes(StandardCharsets.UTF_8));  
        // 完成哈希计算,得到结果  
        byte[] digest = md.digest();  
  
        // 将得到的字节转换成十六进制字符串  
        StringBuilder hexString = new StringBuilder();  
        for (byte b : digest) {  
           String hex = Integer.toHexString(0xff & b);  
           if (hex.length() == 1) hexString.append('0');  
              hexString.append(hex);  
           }  
  
           return hexString.toString();  
     } catch (NoSuchAlgorithmException e) {  
        throw new RuntimeException(e); 
     }  
}  

3. 应用场景

        SHA-256可用于数据防篡改,若对数据增加密钥后再做运算,可近似起到数字签名效果。代码如下:

public static void main(String[] args) {  
    String key = "密钥";
    String originalString = "原始数据串";  
    String sign= "你预期的SHA-256哈希值";
  
    // step1: 增加第三方位置的密钥
    originalString  += key;
    // step2: 字符串的SHA-256哈希值  
    String calculatedSHA256 = generateSHA256(originalString);  
  
    // step3: 进行验签  
    if (calculatedSHA256.equals(sign)) {  
        System.out.println("验签成功,数据未被篡改");  
    } else {  
        System.out.println("验签失败,数据可能被篡改");  
    }  
} 

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫白小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值