计算数据的哈希值,主要取决于数据的类型(字符串、文件、对象等)以及你使用的编程语言或工具。下面我用通俗方式说明,并给出常见示例。
哈希值是通过哈希函数把任意长度的数据,转换成固定长度的一串字符(通常是十六进制)。
特点:
常见哈希算法:
import hashlib
data = "hello world"
hash_value = hashlib.sha256(data.encode('utf-8')).hexdigest()
print(hash_value)
输出示例:
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
import java.security.MessageDigest;
public class HashExample {
public static void main(String[] args) throws Exception {
String data = "hello world";
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte b : hash) {
sb.append(String.format("%02x", b));
}
System.out.println(sb.toString());
}
}
import hashlib
def file_hash(filename):
h = hashlib.sha256()
with open(filename, 'rb') as f:
while chunk := f.read(8192):
h.update(chunk)
return h.hexdigest()
print(file_hash("test.txt"))
✅ 为什么分块读取?
防止大文件一次性加载到内存。
sha256sum filename
md5sum filename
Get-FileHash filename -Algorithm SHA256
常用于:
❌ 错误做法:
MD5(password)
✅ 正确做法:
bcrypt / scrypt / Argon2
❌ 用哈希加密数据
→ 哈希不是加密,无法解密
❌ 用 MD5 / SHA1 存密码
→ 容易被暴力破解
❌ 忽略字符编码
→ "abc" 和 "abc".encode('utf-8') 结果不同
| 场景 | 推荐 |
|---|---|
| 文件校验 | SHA-256 |
| 数据指纹 | SHA-256 |
| 密码存储 | bcrypt / Argon2 |
| 快速去重 | SHA-1 / SHA-256 |
如果你愿意,可以告诉我:
我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。