我需要一个用Excel VBA编写的函数,它将使用标准算法(如SHA-1)对密码进行哈希处理.一些简单的界面,如:
Public Function CreateHash(Value As String) As String
...
End Function
Run Code Online (Sandbox Code Playgroud)
该功能需要在安装了Excel 2003的XP工作站上运行,否则必须不使用第三方组件.它可以引用和使用XP提供的DLL,例如CryptoAPI.
有没有人知道实现这种散列功能的样本?
如何使用Excel VBA获取长字符串的简短哈希
什么是给定的
到目前为止我做了什么
我认为这个答案是一个很好的开始,因为它生成一个4位十六进制代码(CRC16).
但是4位数字很少.在我的400字符串测试中,20%在其他地方得到了重复.
产生碰撞的机会太高了.
Sub tester()
For i = 2 To 433
Cells(i, 2) = CRC16(Cells(i, 1))
Next i
End Sub
Function CRC16(txt As String)
Dim x As Long
Dim mask, i, j, nC, Crc As Integer
Dim c As String
Crc = &HFFFF
For nC = 1 To Len(txt)
j = Val("&H" + Mid(txt, nC, 2))
Crc = Crc Xor j
For j = 1 …Run Code Online (Sandbox Code Playgroud) 到了2017年,如果安全性很重要,那么任何需要使用哈希的人都应该避免使用诸如MD5之类的“破碎”哈希。是否有人找到或创建了一种无需使用VBA或宏即可在Excel中执行更安全的SHA256或SHA512哈希的方法?
过去35,000年前使用MD5就是一个很好的例子(如本SO:不使用VBA的excel中的MD5哈希函数所示)。
避免使用VBA /宏的原因:与移动设备的兼容性,例如iOS的Excel。
旁注:原始的Stack Overflow帖子具有成功的答案,但链接无效,这是供参考的新链接:https : //tzamtzis.gr/2017/web-analytics/excel-function-md5-hashing-without-vba /