mysql – SHA256算法的结果长度
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – SHA256算法的结果长度,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1938字,纯文字阅读大概需要3分钟。
内容图文
我很好奇为什么SHA256的结果可以保存在二进制文件(32)中,但它需要一个varchar(64)才能保存相同的结果.
我的意思是,256位是32字节,因此,在二进制(32)内保存是完全合理的.但是,为什么尝试将其保存在varchar中需要为每个字节添加一个额外的字节?
解决方法:
让我们从头开始看看加密函数是什么以及实际输出的是什么:
A cryptographic hash function is a hash function, that is, an
algorithm that takes an arbitrary block of data and returns a
fixed-size bit string, the (cryptographic) hash value.
这意味着我们获得了1和0的序列.为了正确保存该序列,您必须使用MySQL的二进制数据类型列,因为它不保存有关如何将保存的数据表示给用户的任何数据 – 没有与之关联的编码.这意味着当您尝试查看数据时,您很可能会看到乱码,因为GUI程序将尝试表示存储为ASCII编码字符串的值(这是错误的).
我将跳过将哈希值表示为数字的原因,但重点是它是.它是十六进制数.我们来看你使用的第一个字节:
10101111 =十进制175或十六进制AF.
当然,您可以将ASCII 175表示为某种东西,它很可能是一个奇怪的字符,具体取决于所使用的代码页. ASCII问题是127以上的代码是任意的,导致发明代码页,导致发明Unicode等,所以我暂时不会这样做.
重点是,你不能在每个场景中正确依赖ASCII显示10101111.
这意味着必须使用3个字节显示175,而不是1.为什么?因为175中的每个字符都必须使用自己的字节显示.
这意味着您可以将哈希值显示为十进制数.这也意味着您可以将您的号码显示为十六进制数字,这个数字要短得多.
我们再来10101111吧.
在十进制中它是175,需要3个字节才能在屏幕上显示 – 1表示1,1表示7和1表示5.
在十六进制中它是AF,需要2个字节才能在屏幕上显示 – 显着缩短.
转换为十六进制数时的每个字节至少有2位数(有前导零).对于不是这种情况的十进制数,所以您知道每次要将1个字节表示为十六进制数时 – 您至少有2位数.因此,你的消息是固定宽度,它使用数字0-9,字母A-F,它们在每个ASCII代码页中位于相同位置,因此它们看起来相同.
因此,当您使用AF并以ASCII显示时,A需要1个字节,F需要1个字节.
有32个数字,每个有2位数,32×2 = 64字节.
您可能犯的唯一错误是使用varchar(64).如果知道散列宽度,则使用varchar存储散列是没用的.使用char会好得多,因为你不会浪费varchar列使用的那个1字节.
希望,这有点清除它.它实际上比听起来更简单:)
内容总结
以上是互联网集市为您收集整理的mysql – SHA256算法的结果长度全部内容,希望文章能够帮你解决mysql – SHA256算法的结果长度所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。