[英]Convert string to base 64 from sha1 Hash in Python, returning result as per VBA example
Having a hashing function in VBA, which gets a string and returns a hash, I need to make a function in Python, which returns the same hash.在 VBA 中有一个散列函数,它获取一个字符串并返回一个散列,我需要在 Python 中创建一个函数,它返回相同的散列。
VBA code: VBA代码:
Public Function Base64Sha1(inputText As String)
Dim asc As Object
Dim enc As Object
Dim textToHash() As Byte
Dim SharedSecretKey() As Byte
Dim bytes() As Byte
Set asc = CreateObject("System.Text.UTF8Encoding")
Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")
textToHash = asc.GetBytes_4(inputText)
SharedSecretKey = asc.GetBytes_4(inputText)
enc.Key = SharedSecretKey
bytes = enc.ComputeHash_2((textToHash))
Base64Sha1 = EncodeBase64(bytes)
End Function
Private Function EncodeBase64(arrData() As Byte) As String
Dim objXML As Object
Dim objNode As Object
Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.Text
End Function
Python code : 蟒蛇代码:
import hashlib
import base64
def string_to_hash(word):
digest = hashlib.sha1(word.encode('utf-8')).digest()
return base64.b64encode(digest)
print(string_to_hash('a'))
VBA results: VBA结果:
debug.print(Base64Sha1("a"))
OQLthH/yiTC18UGr+otHFoElNnM=
Python results:蟒蛇结果:
print(string_to_hash('a'))
b'hvfkN/qlp/zhXR3cuerq6jd2Z7g='
In the VB code, the hash is determined with HMAC /SHA1 and not simply with SHA1.在 VB 代码中,散列是用HMAC /SHA1 确定的,而不是简单地用 SHA1 确定的。 The following Python code provides the same result as the VB code:以下 Python 代码提供与 VB 代码相同的结果:
import hmac
import hashlib
import base64
def string_to_hash(word):
word = word.encode('utf-8')
hash = hmac.new(word, word, hashlib.sha1).digest()
return base64.b64encode(hash).decode("utf-8")
print(string_to_hash('a')) # OQLthH/yiTC18UGr+otHFoElNnM=
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.