如何制作你自己的哈希字符串,兼谈对Windows的吐槽
哈希算法,也叫散列算法,指的是对一个字符串进行数学运算,得到一串一定长度的十六进制数字。这个过程是不可逆的,因为给定一个字符串,你可以得到一串确定的十六进制数字,而从一个十六进制数字得不到原始字符串。利用哈希算法的这个特性,你就可以自己造一个秘密字符串,公布你用的哈希算法和哈希后的结果。以后必要时,可以公布这个秘密字符串,让别人验证这个字符串是否能得到一致的结果。
哈希算法有很多种,主流的算法有MD5,SHA1,SHA2家族等等,我以下的示范采用SHA2家族里的SHA512算法,就算量子计算机出来了也无法破解。
生成字符串的哈希是不需要额外安装软件的,主流的桌面操作系统都可以用系统自带软件完成。
你的秘密字符串里最好只有英文大小写字母、数字、英文标点、空格,准确一点说,就是ASCII值在32到126之间的字符,因为可使用的字符少了,所以这个字符串一定要长。
为什么不用Unicode(UTF-8)呢,待会儿再说。
MacOS:打开终端,输入
就能得到哈希值。
Linux:打开终端,输入
就能得到哈希值。
到这儿都没什么问题,在MacOS和Linux里,其实你的秘密字符串可以有中日韩文字、标点等Unicode字符,但为什么最好不要用呢?这就是我要吐槽Windows的地方。
Windows:打开记事本,输入你的秘密字符串,不要换行,保存为txt文件,编码选择ANSI,这时就可以打开命令提示符,输入
得到哈希字符串。
比如保存在桌面,文件名叫string.txt,那么输入的是
麻烦了很多对吧?更麻烦的在后面:
1、此法只能用于Windows Vista及以后系统(Windows 7,Windows 8/8.1,Windows 10等等),Windows XP需要额外安装软件
2、你得到的哈希值每两位空一格,虽然没有影响,但是把本来就长的SHA512变得更长
3、记事本支持保存UTF-8,但会有个3字节的BOM头,真是蛋疼。想保存无BOM头的UTF-8,额外装软件吧
注意,这不是引战,只是指出Windows早期版本的不足之处。我Windows,MacOS,Linux都在用,不存在孰优孰劣,各有各的优势。
最后我给个警告:不要在线生成哈希!有可能会被记录,加入数据库。
测试一下。
的SHA512是:
本文标题使用UTF-8编码后的SHA512是:
哈希算法有很多种,主流的算法有MD5,SHA1,SHA2家族等等,我以下的示范采用SHA2家族里的SHA512算法,就算量子计算机出来了也无法破解。
生成字符串的哈希是不需要额外安装软件的,主流的桌面操作系统都可以用系统自带软件完成。
你的秘密字符串里最好只有英文大小写字母、数字、英文标点、空格,准确一点说,就是ASCII值在32到126之间的字符,因为可使用的字符少了,所以这个字符串一定要长。
为什么不用Unicode(UTF-8)呢,待会儿再说。
MacOS:打开终端,输入
echo -n "<你的秘密字符串>" | shasum -a 512
就能得到哈希值。
Linux:打开终端,输入
echo -n "<你的秘密字符串>" | sha512sum
就能得到哈希值。
到这儿都没什么问题,在MacOS和Linux里,其实你的秘密字符串可以有中日韩文字、标点等Unicode字符,但为什么最好不要用呢?这就是我要吐槽Windows的地方。
Windows:打开记事本,输入你的秘密字符串,不要换行,保存为txt文件,编码选择ANSI,这时就可以打开命令提示符,输入
certutil -hashfile <文件路径> SHA512
得到哈希字符串。
比如保存在桌面,文件名叫string.txt,那么输入的是
certutil -hashfile %USERPROFILE%\Desktop\string.txt SHA512
麻烦了很多对吧?更麻烦的在后面:
1、此法只能用于Windows Vista及以后系统(Windows 7,Windows 8/8.1,Windows 10等等),Windows XP需要额外安装软件
2、你得到的哈希值每两位空一格,虽然没有影响,但是把本来就长的SHA512变得更长
3、记事本支持保存UTF-8,但会有个3字节的BOM头,真是蛋疼。想保存无BOM头的UTF-8,额外装软件吧
注意,这不是引战,只是指出Windows早期版本的不足之处。我Windows,MacOS,Linux都在用,不存在孰优孰劣,各有各的优势。
最后我给个警告:不要在线生成哈希!有可能会被记录,加入数据库。
测试一下。
The quick brown fox jumps over the lazy dog
的SHA512是:
07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
本文标题使用UTF-8编码后的SHA512是:
72222d8cc83f2de57fefc65b630a145aa3f26c02a223b0ac4ba3e8e3ebadff6ce2f31ce782fea1792658b32a4b28b8c8c40e8d4293a969b982dc9e930fc2ba27