我有一个包含1000多个电子邮件的csv文件,我想使用SHA256 HMAC和共享密钥进行哈希处理,编码为Base64。
有一个类似的问题here,但我无法使解决方案适合我。我是python的新手,我不知道在哪里更改代码以便使用共享密钥。
这是答案中略微修改的代码:
import csv
import hashlib
import hmac
import base64
IN_PATH = 'test.csv'
OUT_PATH = 'test_hashed.csv'
ENCODING = 'utf8'
HASH_COLUMNS = dict(Mail='md5')
def main():
with open(IN_PATH, 'rt', encoding=ENCODING, newline='') as in_file, \
open(OUT_PATH, 'wt', encoding=ENCODING, newline='') as out_file:
reader = csv.DictReader(in_file)
writer = csv.DictWriter(out_file, reader.fieldnames)
writer.writeheader()
for row in reader:
for column, method in HASH_COLUMNS.items():
data = row[column].encode(ENCODING)
digest = hashlib.new(method, data).hexdigest()
row[column] = '0x' + digest.upper()
writer.writerow(row)
if __name__ == '__main__':
main()
输入文件(.csv)如下所示:
Mail
DHSKA@gmail.com
DJÖANw12@gmail.com
JSNÖS83@ymail.com
HDKDLSA@gmail.com
KKKDLAmS19@yamil.com
使用上面的代码,输出文件如下所示:
0xB6A77B6EB853CC4CC8342B312293FA9C
0xEB439592D8EEC2A38A597350EF80E512
0x833EB6AEC1D03D7D8C94606E0D749B80
0x8007D8D1702E8A749EBD6033A52A7897
0x415E067487C4A5FBDB86AB0F855DB114
但由于我确实想要使用带有密钥和sha256的HMAC,上述解决方案对我来说并不起作用,我也不知道如何采用这种方法。
关键是这样的:
123Abc
我试图做这样的事情,但对于整个文件:
import hmac
import hashlib
import base64
secret = "123Abc"
secret_bytes = bytes(secret, 'latin-1')
data = "DHSKA@gmail.com"
data_bytes = bytes(data, 'latin-1')
digest = hmac.new(secret_bytes, msg=data_bytes, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest).decode()
因此,我的问题是如何在上面的代码中使用密钥合并HMAC SHA 256哈希诡计?我只是无法确定要更改哪些参数?
答案 0 :(得分:1)
我不认为你需要用字典麻烦自己;您在此处没有可变数量的列,您只需将转换应用于一列。
如果您将正在使用的HMAC方法放入函数中,它会更容易理解:
PopOver
现在整齐地生成一个Base64字符串,其中包含来自电子邮件地址的HMAC摘要和您的(编码)秘密:
showPopOver = () => {
this.setState({
popOverVisible: true
})
}
...
<Popover ...
visible={this.state.popOverVisible}>
<span type="primary" onClick={this.showPopOver}>Click me (Popover Button)</span>
</Popover>
现在,您可以将其应用于import hmac
import hashlib
import base64
secret = "123Abc"
secret_bytes = bytes(secret, 'latin-1')
def create_signature(email, secret_bytes):
data_bytes = email.encode('latin-1')
digest = hmac.new(secret_bytes, msg=data_bytes, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest).decode()
return signature
列值,并使用结果写出新的CSV:
>>> create_signature('DHSKA@gmail.com', secret_bytes)
'3KaSw4QeA5l0rz49uutaDGemn4Et4CQnbnngm6mmpjE='
演示:
'Mail'