在论坛版本的基础上做了如下优化
1.变量声明为具体的数据类型(原论坛代码全部为弱类型,怀疑为vbs代码)
2.将如下SHA256基本函数进行内联汇编优化
Public Function ADD(ByVal wParam As Long, ByVal uParam As Long) As Long
Public Function ADDU(ByVal A As Long, ByVal B As Long, ByVal C As Long, ByVal D As Long) As Long
Public Function SHL(ByVal dwNum As Long, ByVal dwShift As Long) As Long
Public Function SHR(ByVal dwNum As Long, ByVal dwShift As Long) As Long
Public Function ROR(ByVal dwNum As Long, ByVal dwShift As Long) As Long
Public Function GetDWord(ByVal lpSrc As Long) As Long '在获取数据同时进行大小端互换
Public Function Sigma0(ByVal x As Long) As Long 'Σ0(x) = ROR(x,2) Xor ROR(x,13) Xor ROR(x,22)
Public Function Sigma1(ByVal x As Long) As Long 'Σ1(x) = ROR(x,6) Xor ROR(x,11) Xor ROR(x,25)
Public Function Sigma2(ByVal x As Long) As Long 'σ0(x) = ROR(x,7) Xor ROR(x,18) Xor SHR(x,3)
Public Function Sigma3(ByVal x As Long) As Long 'σ1(x) = ROR(x,17) Xor ROR(x,19) Xor SHR(x,10)
3.优化文件打开方式为文件映射
4.优化代码逻辑:
原逻辑:文件先转为Long型数组(同时进行大小端互换),再进行摘要迭代
新逻辑:文件映射到内存地址,逐块(64 Byte)进行迭代,迭代时根据内存地址获取数据(同时进行大小端互换)
其他更改
为增加代码可读性,将摘要迭代、文件尾填充从主体代码中摘出,改写为函数过程
1.变量声明为具体的数据类型(原论坛代码全部为弱类型,怀疑为vbs代码)
2.将如下SHA256基本函数进行内联汇编优化
Public Function ADD(ByVal wParam As Long, ByVal uParam As Long) As Long
Public Function ADDU(ByVal A As Long, ByVal B As Long, ByVal C As Long, ByVal D As Long) As Long
Public Function SHL(ByVal dwNum As Long, ByVal dwShift As Long) As Long
Public Function SHR(ByVal dwNum As Long, ByVal dwShift As Long) As Long
Public Function ROR(ByVal dwNum As Long, ByVal dwShift As Long) As Long
Public Function GetDWord(ByVal lpSrc As Long) As Long '在获取数据同时进行大小端互换
Public Function Sigma0(ByVal x As Long) As Long 'Σ0(x) = ROR(x,2) Xor ROR(x,13) Xor ROR(x,22)
Public Function Sigma1(ByVal x As Long) As Long 'Σ1(x) = ROR(x,6) Xor ROR(x,11) Xor ROR(x,25)
Public Function Sigma2(ByVal x As Long) As Long 'σ0(x) = ROR(x,7) Xor ROR(x,18) Xor SHR(x,3)
Public Function Sigma3(ByVal x As Long) As Long 'σ1(x) = ROR(x,17) Xor ROR(x,19) Xor SHR(x,10)
3.优化文件打开方式为文件映射
4.优化代码逻辑:
原逻辑:文件先转为Long型数组(同时进行大小端互换),再进行摘要迭代
新逻辑:文件映射到内存地址,逐块(64 Byte)进行迭代,迭代时根据内存地址获取数据(同时进行大小端互换)
其他更改
为增加代码可读性,将摘要迭代、文件尾填充从主体代码中摘出,改写为函数过程