密码学:HASH & 数字签名

2021-04-16  本文已影响0人  HotPotCat

一、HASH概述

Hash一般翻译做“散列”,也直接音译为“哈希”,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要(指纹)的函数。

HASH特点

为什么无法逆运算?
比如对数据进行MD5运算得到的结果是128位,也就是能表达的数据是1632种(有限),那么由于数据(无限)。这里必然有多个数据拥有同样的hash值(散列碰撞)。

二、HASH用途

三、数字签名

因为国外喜欢用支票,支票上面的签名能够证明身份。数字签名顾名思义,就是用于鉴别数字信息的方法。确认二进制是不是原始机构签发的。

image.png
1.对二进制计算hash值。
2.签发方对hash值进行rsa加密。
3.接收方解密获取hash值并且对二进制文件计算hash值,hash值相同则证明是原始文件。

在这里对hash值进行rsa加密后的数据就叫做这个二进制文件的数字签名

四、hash终端

HASH

md5

// 字符串
md5 -s "HotpotCat"
//文件
md5 message.txt

计算MD5散列结果,返回32个字符的MD5散列字符串:

a3c28fbab2813ebc16d8b89af683e696

b15dee09737df6c4a23079148ff64172

sha1

//字符串
echo -n "HotpotCat" | openssl  sha1
//文件
openssl sha1 message.txt

计算SHA1散列结果,返回40个字符的SHA1散列字符串:

108e0108a568820fe1fa71038091a0f4d753f5b2

ccc9cd754ec0708ae43b83813adb4b10895d67a1

sha256

//字符串
echo -n "HotpotCat" | openssl sha256
//文件
openssl sha256 message.txt

计算SHA256散列结果,返回64个字符的SHA256散列字符串:

cc49e970f712386a382c990bd5670298eb1bf5167e85b3d95b9c394394eda7ce

fbabb42485e50ebb8bbaf200841cfebd21bfbe7e44e28a8068dff888b6952a3a

sha512

//字符串
echo -n "HotpotCat" | openssl sha512
//文件
openssl sha512 message.txt

计算SHA 512散列结果,返回128个字符的SHA 512散列字符串:

7672238bfe9cd9ccc37bfab26052fb96cf9e43df8b21fc906ea9fcb79e26d0aed059cee305295e874a674e5f1dc15a1f2e76101c11a98ae48a6ace5ad6de0f8e

587d4c39b3e1005a6a950eabe974ae519a0589197fe186a9a656898dc32ea957d52c306ddface8f917b5e773f0e14bc7f487a3c2a0ff5e536ae407d02fe0ce4c

HMAC

HMAC md5

echo -n "HotpotCat" | openssl dgst -md5 -hmac "key"

计算HMAC MD5散列结果,返回32个字符的HMAC MD5散列字符串:

9374e4e9c7bbe8e18cef29fafd76f9e6

HMAC SHA1

echo -n "HotpotCat" | openssl sha1 -hmac "key"

计算HMAC SHA1散列结果,返回40个字符的HMAC SHA1散列字符串:

c6e00dfd90223967caa9c706e356a493c02f33b8

HMAC SHA256

echo -n "HotpotCat" | openssl sha256 -hmac "key"

计算HMAC SHA256散列结果,返回64个字符的HMAC SHA256散列字符串:

16c67f0640105490197c5c7f5ca9a9412e494eaebc541e47c1cf1e01499350c8

HMAC SHA512

echo -n "HotpotCat" | openssl sha512 -hmac "key"

计算HMAC SHA512散列结果,返回128个字符的HMAC SHA512散列字符串:

246a301b3324cded0d44bbb1f036dc2c5580fbefc6d6ddf05ac06a262604bc738b5200ed42efa05c941bc2cd29b122b00ebe28065fdd9d95c7122579bd9b8dfb

五、hash代码

iOS中加密解密框架是CommonCrypto

//string
NSString *message = @"HotpotCat";
NSString *key = @"key";
NSLog(@"string md5: %@",[message md5String]);
NSLog(@"string sha1: %@",[message sha1String]);
NSLog(@"string sha256: %@",[message sha256String]);
NSLog(@"string sha512: %@",[message sha512String]);
NSLog(@"string hmac md5: %@",[message hmacMD5StringWithKey:key]);
NSLog(@"string hmac sha1: %@",[message hmacSHA1StringWithKey:key]);
NSLog(@"string hmac sha256: %@",[message hmacSHA256StringWithKey:key]);
NSLog(@"string hmac sha512: %@",[message hmacSHA512StringWithKey:key]);

//文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"message" ofType:@"txt"];
NSLog(@"file md5: %@",[filePath fileMD5Hash]);
NSLog(@"file sha1: %@",[filePath fileSHA1Hash]);
NSLog(@"file sha256: %@",[filePath fileSHA256Hash]);
NSLog(@"file sha512: %@",[filePath fileSHA512Hash]);

输出:

string md5: a3c28fbab2813ebc16d8b89af683e696
string sha1: 108e0108a568820fe1fa71038091a0f4d753f5b2
string sha256: cc49e970f712386a382c990bd5670298eb1bf5167e85b3d95b9c394394eda7ce
string sha512: 7672238bfe9cd9ccc37bfab26052fb96cf9e43df8b21fc906ea9fcb79e26d0aed059cee305295e874a674e5f1dc15a1f2e76101c11a98ae48a6ace5ad6de0f8e
string hmac md5: 9374e4e9c7bbe8e18cef29fafd76f9e6
string hmac sha1: c6e00dfd90223967caa9c706e356a493c02f33b8
string hmac sha256: 16c67f0640105490197c5c7f5ca9a9412e494eaebc541e47c1cf1e01499350c8
string hmac sha512: 246a301b3324cded0d44bbb1f036dc2c5580fbefc6d6ddf05ac06a262604bc738b5200ed42efa05c941bc2cd29b122b00ebe28065fdd9d95c7122579bd9b8dfb
file md5: b15dee09737df6c4a23079148ff64172
file sha1: ccc9cd754ec0708ae43b83813adb4b10895d67a1
file sha256: fbabb42485e50ebb8bbaf200841cfebd21bfbe7e44e28a8068dff888b6952a3a
file sha512: 587d4c39b3e1005a6a950eabe974ae519a0589197fe186a9a656898dc32ea957d52c306ddface8f917b5e773f0e14bc7f487a3c2a0ff5e536ae407d02fe0ce4c

Demo

总结

上一篇下一篇

猜你喜欢

热点阅读