我有一个要在 Python 中使用的小 C# 函数。 但是我不确定如何使用 hashlib 来完成相同的结果。 该函数接收一个字符串并返回字符串的 sha1 哈希的 base64 编码:

private string ConvertStringToHash(string word)
{
  return Convert.ToBase64String(new SHA1CryptoServiceProvider().ComputeHash(new UnicodeEncoding().GetBytes(word)));
}

我在 python 上试过这个,但我没有得到相同的结果:

def convert_string_to_hash(word):
    m1 = hashlib.sha1()
    m1.update(word)
    res = m1.digest()
    encoded = base64.b64encode(res)
    return encoded

在 Python 中完成同样事情的最佳方法是什么?

#1楼 票数:4 已采纳

输出的差异源于您使用的编码:

  • 在您的 C# 代码中, UnicodeEncoding将输入字符串 ( word ) 编码为 UTF-16 小端;
  • 在你的 Python 代码中,你甚至没有处理 Unicode 字符串(它们必须被编码为一些字节)

因此,只需在散列之前将word编码为UTF-16 little endian

import hashlib
import base64

def convert_string_to_hash(word):
    digest = hashlib.sha1(word.encode('utf-16-le')).digest()
    return base64.b64encode(digest)

此外,您的 Python 函数可以稍微缩短。

#2楼 票数:0

以下为我在 LDAP 中存储工作。 十六进制匹配,但正是 base64 编码使它越界了 - python3。

    newSaUserPassword = "{SHA256}" + \
                        base64.b64encode(hashlib.sha256(options.newSaUserPassword.encode("utf-8")).digest())

  ask by Pablo Estrada translate from so

未解决问题?本站智能推荐:

1回复

将字符串从Python中的sha1Hash转换为base64,根据VBA示例返回结果

在 VBA 中有一个散列函数,它获取一个字符串并返回一个散列,我需要在 Python 中创建一个函数,它返回相同的散列。 VBA代码: 蟒蛇代码: VBA结果: 蟒蛇结果:
1回复

CryptoDigest/SHA1的Base64编码-字符串与Java/Python的结果不匹配

我正在尝试获取IOS上字符串的消息摘要。 我已经尝试过nv-ios-digest 3rd Hash lib,但是还是没用。 下面是我用来获取消息摘要的base64encoded字符串的函数。 这是我的示例输入字符串-'530279591878676249714013992002683e
2回复

为什么在存储之前将SHA1转换为base64?

我需要将密码存储在SQL数据库中。 目前不需要太高的安全性,但是我打算使用SHA1 + seed来存储我的密码,而不是使用带有种子的MD5哈希。 用法仅用于网站用户登录。 因此,当用户登录时,我的C#代码将连接一个salt + password,对其进行哈希处理,然后与数据库中存储的内容
1回复

如何从C#中的base64编码字符串中获取sha1哈希

我有需要将文件转换为base64的情况,这很好。 之后,我需要从该base64编码的字符串中获取sha1哈希。 我发现了很多示例,这些示例如何将文件读取到字节数组并从中获取sha1哈希,但是我需要从base64编码的字符串中获取sha1哈希。
1回复

将SHA1转换为base64

努力将sha1转换为base64 AttributeError:'HMAC'对象没有属性'base64'
2回复

该算法在Python3.8.3hashlib中是否有Hash算法;Base64(SHA1(随机数+时间戳+SHA1(密码)))?

首先道歉,这里的新手刚刚开始我的 Pythonic 之旅,并且到目前为止还很享受,除了我面临的这个小问题...... 我一直在尝试找到一种方法,使用 Python 的 hashlib 和 base64 库对一些值进行双哈希(SHA1)和 base64 编码,以获取密码摘要,但我被卡住了。 我需要使用
1回复

将纯文本从文本框转换为SHA1,然后将Sha1转换为base64C#

好吧,我想从纯文本框中生成一个sha1哈希,然后将哈希转换为base64以存储在mysql数据库中,我该怎么做?
2回复

将字符串转换为base-64中的数字

所以,我正在尝试编写一个程序来解码 6 个字符的 base-64 数字。 这是问题陈述: 返回由 6 个字符的字符串 s 以相反顺序表示为 base-64 数字的 36 位数字,其中 64 个数字的顺序为:0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghij