VBA和VBScript的SHA2加密哈希算法

介绍

安全哈希算法2是由美国国家安全局(NSA)设计并由美国国家标准技术研究院(NIST)作为政府标准发布的一系列密码哈希算法。

NIST目前正在进行一项竞赛,目的是为SHA-3寻找新的算法系列。 这些新功能可能不一定源自SHA-2算法。

MD5算法是使用最广泛的哈希算法之一,但是发现它存在很多弱点,因此强烈建议停止使用MD5。

什么是SHA2

SHA2是一种哈希算法。 哈希算法基本上是一种输出固定长度的单向加密。 您可以加密文本,但不能解密文本。 它通常用于密码存储和消息身份验证。

代替存储明文密码,您要做的是预先计算密码的哈希值。 当他们输入密码时,您对他们的输入进行哈希处理并将其与您存储的哈希进行比较。 这样,即使他们知道哈希的结果是什么,他们也不知道创建哈希的原始密码。 对于他们来说,计算将导致相同哈希的密码将是不可行的。

附带说明一下,这是基于Linux的实用程序重置Windows密码的方式。 它们会覆盖与用户帐户一起存储的哈希值。 如果安全是一个问题,那么您应该使用密码来加密该用户的所有文件。 这样,即使他们覆盖哈希并以该用户身份登录,他们也无法查看文件,因为它们没有密码来解密数据。

散列通常用于Internet通信中以验证消息。 发件人将对原始数据进行哈希处理,并将其与加密数据一起发送。 然后,接收器将解密数据,并根据未加密的数据重新计算哈希值。 如果哈希匹配,则可以确保他已按预期收到数据。 如果您仅发送加密的数据,则可以想象有人可以截取该消息,在消息中翻转一点,然后将其传递。 接收者永远不会知道消息已更改。

哈希算法的一般缺点

由于哈希算法旨在返回固定长度,而不管输入的大小如何,因此总是会发生冲突。 冲突是指两个不同的文本产生相同的哈希值。 哈希值越长,发生碰撞的可能性越小。

使用散列存储密码时,它不能防止暴力破解密码。 同样,由于使用算法散列的相同文本始终会产生相同的散列,因此强烈建议使用随机数来克服彩虹表攻击。 随机数,初始化向量或盐基本上是与密钥一起使用的随机位,因此,即使您使用的是相同的密钥,每条消息也有所不同,因为实际上这些随机位会更改所使用的密钥。 彩虹表是预先计算的流行密码哈希表。 黑客要做的就是将预先计算的哈希与存储的哈希进行比较,以查看是否存在匹配项。 随机数通过更改要散列的实际文本来克服这一点。

SHA2如何运作

SHA2将消息分成64个字节的块,对每个块进行数学转换,然后将它们添加到哈希值中。 它对每个块都执行此操作,并将它们添加到相同的值。 最后,您将获得固定长度的输出。

SHA2的特定弱点

当前没有已知的成功攻击可以破坏所有SHA2 256位算法。

样品实施

这是SHA2 256位算法的实现。 它甚至可以在Visual Basic脚本中工作,并且实际上是专门为VBScript编码的。 但是它应该可以直接移植到VBA。 它接受一个字符串,对其进行哈希处理,然后将结果作为包含哈希值的32项数组返回。 我根据官方的SHA2散列验证了输出。

为此,它必须使用32位无符号整数,但是由于在VBA中无法将其用作数据类型,因此必须使用双精度。 但是,使用双精度时,MOD,XOR,AND和NOT运算符将溢出。 除此之外,VBA中没有位移运算符或功能。 所以我必须创建那些。

Function SHA(ByVal sMessage)
    Dim i, result(32), temp(8) As Double, fraccubeprimes, hashValues
    Dim done512, index512, words(64) As Double, index32, mask(4)
    Dim s0, s1, t1, t2, maj, ch, strLen 
    mask(0) = 4294967296#

你可能感兴趣的:(数据结构与算法)