gpt4 book ai didi

mysql - 为什么mysql和perl的base64字符串编码不同?

转载 作者:行者123 更新时间:2023-11-29 02:09:08 25 4
gpt4 key购买 nike

#!/usr/bin/env perl
use Digest;
say Digest->new( 'SHA-1' )->add('test')->b64digest; # qUqP5cyxm6YcTAhz05Hph5gvu9M


SELECT TO_BASE64(SHA1('test')); # YTk0YThmZTVjY2IxOWJhNjFjNGMwODczZDM5MWU5ODc5ODJmYmJkMw==

相同的 ASCII 字 test 在 Perl 中编码为 qUqP5cyxm6YcTAhz05Hph5gvu9M,在 MySQL 中编码为 YTk0YThmZTVjY2IxOWJhNjFjNGMwODczZDM5MWU5ODc5ODJmYmJkMw==

为什么?

最佳答案

正如 Raymond 所指出的,您正在查看两种不同计算的结果。

您的 perl 打印出 "test" 的 base64 编码 SHA-1 摘要。您的 MySQL 查询采用 "test" 的 base16 编码 SHA-1 摘要,然后对该字符串进行 base64 编码。

考虑一个 perl 单行代码,它执行与 SELECT 相同的两个步骤:

$ perl -MDigest -MMIME::Base64 -E 'say encode_base64(Digest->new("SHA-1")->add("test")->hexdigest)'
YTk0YThmZTVjY2IxOWJhNjFjNGMwODczZDM5MWU5ODc5ODJmYmJkMw==

MySQL query

SELECT to_base64(unhex(sha1('test')))

它给出 qUqP5cyxm6YcTAhz05Hph5gvu9M=,就像您的 perl 但添加了填充。

不过,我会坚持使用 base16/hex 版本,因为这是人们习惯于看到的摘要:a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 用于 "test" 的 SHA-1 .

关于mysql - 为什么mysql和perl的base64字符串编码不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58935700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com