用 VBA 代码算出来的 SHA256 值,有时候跟网上的计算结果相同,有时候却完全不一样。。

2020-07-07 17:21:03 +08:00
 WesleyNZ
我把这个
https://blog.csdn.net/xhhjin/article/details/50520621

我按照这个人的帖子,(机器 mac os 15.3,office2019 )

如果是比较短的英文句子,那么加密结果
http://www.jsons.cn/sha/ 提供的完全一模一样,
我以为这个函数就万能的。
2 楼就是原文,你们试试看:



EXCEL 的 VBA 给出的函数返回值是
1cdac470e33461914fd8792d82e42cb873412e8f4bcbb5a0b2d195d9aced6d26

http://www.jsons.cn/sha/ 提供的返回值是
8dd0390fe0b02f168b5c9e2b39e0aea17d597a091c39ab3a1580b1e4a25d10b7

这叫我怎么办???
到底出了什么问题呢???

这段 VBA 代码还警告了这件事,意思就是不同系统算出来的 sha256 不一样吗??太奇怪了吧
'
' *** CAUTION ***
' See the comment attached to the SHA256 method below regarding use on systems
' with different character sets.
2846 次点击
所在节点    程序员
30 条回复
WesleyNZ
2020-07-07 17:22:03 +08:00
"Lorem ipsum 的大部分文本源于西赛罗的《善恶之尽》( De finibus bonorum et malorum )中 1.10.32-3 小节。Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit (“无人爱苦,亦无人寻之欲之,乃因其苦”)是第一个众所周知的版本。这是由一名弗吉尼亚 Hampden-Sydney 大学的出版社社长,也是一名文献学者的 Richard McClintock 所发现;他在经典拉丁文学中查找“consectetur”一词相关引用时发现,这个词汇在文学体中使用频率相当低。

西塞罗的版本普里默斯(第一卷),第 1.10.32–3 节(包含大多数 Lorem Ipsum 文本的片段已用红色字体标注):

Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, quia dolor sit amet, consectetur, adipisci[ng] velit, sed quia non numquam [do] eius modi tempora inci[di]dunt, ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qui in ea voluptate velit esse, quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo voluptas nulla pariatur?"
minami
2020-07-07 17:26:59 +08:00
这个警告不是说不同系统算出来的不一样,而是说不同系统可能采用不同字符集,所以算出来的可能不一样
GM
2020-07-07 17:27:39 +08:00
可能是编码不同导致的。
minami
2020-07-07 17:28:30 +08:00
你把输入转成统一的字符集编码应该就可以了
WesleyNZ
2020-07-07 17:28:45 +08:00
@minami 我看不懂这个代码使用的是什么字符集标准。。
我想请问一下 mac 终端算 sha256 的字符集是什么?我估计是 utf-8
但是这个代码你能帮我看一下用的是什么字符集计算的吗?

就算知道我也不知道怎么改啊。。这毕竟的 2001 年的代码。。。无从下手 我也不会改。
WesleyNZ
2020-07-07 17:31:27 +08:00
@GM 请问比如说这个函数在 excel 里是:FunSha256 (),我现在在单元格比如说 c1 的数据,我想算出 sha256 的值。
但是我现在不知道,现在通用的 sha256 计算的字符集是什么??
这个 vba 函数的字符集用的是什么??
如何转换字符集??
lonelinsky
2020-07-07 17:31:31 +08:00
Hash (SHA256) 是基于字节流进行计算的,你 1L 回复中贴出来的文字是包含中文的,在不同的编码格式下字节流是不一样的,所以算出来的值就会不一样了。简单的英文没问题应该是都是用了 ASCII 编码而已 ( UTF-8 下英文的编码和 ASCII 是一致的,网上主流一般都是基于 UTF-8 编码后算的)。

也就是原来提示 CAUTION 所说的:
' *** CAUTION ***
' See the comment attached to the SHA256 method below regarding use on systems
' with different character sets.
WesleyNZ
2020-07-07 17:31:40 +08:00
@GM 怎么让他们编码一致
WesleyNZ
2020-07-07 17:34:16 +08:00
@lonelinsky 请问如何让我输入函数()里面的自变量变成 utf-8 编码的呢?
lonelinsky
2020-07-07 17:39:20 +08:00
@WesleyNZ 简单搜了下,找到这个,具体的你要自己试下了。

https://di-mgt.com.au/howto-convert-vba-unicode-to-utf8.html
WesleyNZ
2020-07-07 17:40:51 +08:00
@lonelinsky 我已经暴毙了 谢谢,我做不到。。我不是程序员 ...........谢谢你的帮助 我估计自己啃要看 3 天以上。
GM
2020-07-07 17:46:01 +08:00
@WesleyNZ
你先用一份全英文的来算,看看是否一致。
如果一致的话,末尾添加一个中文再算一次,看看是否一致。

如果添加中文后不一致的话,那就可以确定是编码问题导致的。
WesleyNZ
2020-07-07 17:48:13 +08:00
@GM 等下我回复你结果,刚才有一个全英文的加密也是错误的 我觉得很奇怪 只有英语跟小些的标点符号 加密结果也不同 另一个只有英语字母跟逗号句号的却正常
GM
2020-07-07 17:54:48 +08:00
@WesleyNZ 中文标点也是中文,建议随机乱打一份全英文的来测试,100 个字符以上
WesleyNZ
2020-07-07 17:56:07 +08:00
@GM 好。
jiejiss
2020-07-07 18:22:25 +08:00
也有可能是溢出了
WesleyNZ
2020-07-07 18:52:16 +08:00
@jiejiss 可能是。
WesleyNZ
2020-07-07 18:53:11 +08:00
@GM 我没有用过中文标点。。现在要检查下。。我估计是移除。
我用 vba 的函数,算出来的结果跟 utf8 ( mac ) utf8 ( win )的结果是一样的(前提是只用英语,英语字符,数字)
GM
2020-07-08 11:19:18 +08:00
@WesleyNZ 你最好把原始字符串发出来,算出来的 sha256 结果也发出来,这样别人才能查问题在哪里。
WesleyNZ
2020-07-08 13:10:25 +08:00
我得临时编一段。。。。。。这个有点私密

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/687970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX