SHA加密

计算字符串的SHA哈希值,支持多种SHA算法,常用于数据校验、签名等场景
算法
SHA简介
SHA(Secure Hash Algorithm)是一系列密码散列函数,由美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)发布。SHA系列算法包括SHA-1、SHA-256、SHA-384和SHA-512等,输出长度分别为160位、256位、384位和512位。
算法特点
  • 固定输出长度:不同版本的SHA算法产生不同长度的散列值
  • 不可逆性:单向散列函数,无法从散列值反推原始消息
  • 抗碰撞性:难以找到两个不同的输入产生相同的散列值
  • 雪崩效应:输入消息的微小改变会导致输出散列值的巨大变化
算法版本
  • SHA-1:输出160位(20字节)散列值,已不再推荐用于安全场景
  • SHA-256:输出256位(32字节)散列值,目前最常用的版本
  • SHA-384:输出384位(48字节)散列值,适用于需要更高安全性的场景
  • SHA-512:输出512位(64字节)散列值,提供最高级别的安全性
常见用途
  • 数字签名和证书
  • 密码存储和验证
  • 文件完整性校验
  • 区块链和加密货币
代码示例
Python:
import hashlib

data = "Hello, SHA!"
# SHA-256
sha256_hash = hashlib.sha256(data.encode()).hexdigest()
print(sha256_hash)
        
Java:
import java.security.MessageDigest;

public class SHAExample {
    public static void main(String[] args) throws Exception {
        String data = "Hello, SHA!";
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hash = md.digest(data.getBytes());

        StringBuilder result = new StringBuilder();
        for (byte b : hash) {
            result.append(String.format("%02x", b));
        }

        System.out.println(result.toString());
    }
}
        
JavaScript:
const crypto = require('crypto');

const data = 'Hello, SHA!';
const sha256_hash = crypto.createHash('sha256').update(data).digest('hex');
console.log(sha256_hash);
        
PHP:
$data = 'Hello, SHA!';
$sha256_hash = hash('sha256', $data);
echo $sha256_hash;
        
注意事项
  • SHA-1已不再推荐用于安全场景,建议使用SHA-256或更高版本
  • SHA系列算法为不可逆加密,无法通过哈希值还原原文
  • 对于密码存储,建议结合盐值(Salt)使用,以增加安全性