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)使用,以增加安全性