我有一个相当奇怪的问题.对于分布式哈希表,我需要能够对MD5哈希进行一些简单的数学运算.这些包括总和(由散列表示的数字和)和模运算.现在我想知道实现这些操作的最佳方法是什么.我正在使用hashlib来计算哈希值,但是因为我得到的哈希值就是字符串,我该怎么用它们计算?
我很难完全理解加密的工作原理和编码方式,尤其是python.我只是试图了解基础并以最简单的形式创建代码.
我将在两个不同的站点之间传递userID,但显然我需要使用私钥加密,因此Website2知道它来自Website1.这似乎是我的代码:http: //docs.python.org/library/hashlib.html#module-hashlib,但它没有很好的例子(或者我可能在错误的位置).
我遇到的问题是完全理解如何编码和解码.
那么让我们说每个网站都知道的共享私钥是:
shared_private_key = "ABCDEF"
Run Code Online (Sandbox Code Playgroud)
我希望Website1将以下用户ID传递给Website2:
userID = "123456"
Run Code Online (Sandbox Code Playgroud)
Website1如何使用私钥加密我的userID,加密可以通过HTTP头发送,然后让Website2解密并能够使用共享私钥读取userID?
我为提出这样一个基本问题而道歉,但我没有意识到应该怎么做.谢谢.
的hashlibPython模块提供了以下的散列算法的构造:md5(),sha1(),sha224(),sha256(),sha384(),和sha512().
假设我不想使用md5,那么使用sha1而不是sha512会有很大的不同吗?我想使用类似的东西hashlib.shaXXX(hashString).hexdigest(),但因为它只是用于缓存,我不确定我需要(最终)额外的512开销......
是否存在这种开销,如果存在,它有多大?
你如何在python中刷新(或重置)并重用hashlib.md5的实例?如果我在脚本中执行多个散列操作,每次使用hashlib.md5的新实例似乎效率低下,但是从python文档中我看不到任何方法来刷新或重置实例.
当我尝试hashlib在任何上下文中导入时,它会抛出此错误:
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.11-intel/egg/hashlib.py", line 115, in <module>
"""
TypeError: 'frozenset' object is not callable
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?我只是通过打开终端,运行python然后键入来生成此错误import hashlib.
我们需要这样的代码来进行哈希处理:
from hashlib import sha256
Hash = sha256(b"hello").hexdigest()
#Hash = '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'
Run Code Online (Sandbox Code Playgroud)
hexdigest 似乎正在做主要的事情,因为没有它我们将得到以下结果:
Hash = sha256(b"hello")
#Hash = <sha256 HASH object @ 0x000001E92939B950>
Run Code Online (Sandbox Code Playgroud)
hexdigest 的使用是强制性的,因为如果不使用它,将获得另一个输出,但它有什么作用呢?
经过彻底的搜索,我在整个网络上都没有找到这个非常常见的问题的完整解释和解决方案。所有需要使用 hashlib 进行编码的脚本都会给我错误:
Python 3.10
import hashlib
h = hashlib.new('ripemd160')
Run Code Online (Sandbox Code Playgroud)
返回:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.10/hashlib.py", line 166, in __hash_new
return __get_builtin_constructor(name)(data)
File "/usr/lib/python3.10/hashlib.py", line 123, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type ripemd160
Run Code Online (Sandbox Code Playgroud)
我已经尝试检查该哈希值是否存在于库中,以及是否有:
print(hashlib.algorithms_available):{'md5','sm3','sha3_512','sha384','sha256','sha1','shake_128','sha224','sha512_224','sha512_256','blake2b','ripemd160 ', 'md5-sha1'、'sha512'、'sha3_256'、'shake_256'、'sha3_384'、'漩涡'、'md4'、'blake2s'、'sha3_224'}
我在 Linux 的 vps 中遇到这个问题,但在我的电脑上使用 Windows,没有这个问题。
我真诚地感谢任何帮助或建议。
我需要你的帮助,
如何纠正错误 AttributeError: 'module' object has no attribute 'sha1',
当我启动命令示例 import random 或 import hashlib 时,我得到这样的结果
root@thinkad:~# python
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/random.py", line 49, in <module>
import hashlib as _hashlib
File "hashlib.py", line 3, in <module>
hasher = hashlib.sha1()
AttributeError: 'module' object has no attribute 'sha1'
>>> import …Run Code Online (Sandbox Code Playgroud) 的文档hashlib.scrypt有点短:
hashlib.scrypt(密码, *, 盐, n, r, p, maxmem=0, dklen=64)
该函数提供 RFC 7914 中定义的基于 scrypt 密码的密钥派生函数。
密码和盐必须是类似字节的对象。应用程序和库应将密码限制在合理的长度(例如 1024)。salt 应该是大约 16 或更多字节,来自正确的源,例如 os.urandom()。
n 是 CPU/内存成本因子,r 是块大小,p 并行化因子和 maxmem 限制内存(OpenSSL 1.1.0 默认为 32 MiB)。dklen 是派生密钥的长度。
我发现它n必须是 2 的幂并且至少是 2。
除此之外,我感觉有点孤独。hashlib.scrypt(b"foo", salt=b"bar", n=2, r=1, p=1)今天被认为是安全的吗?如何判断采用哪些参数?
我正在尝试为使用 NTLM 身份验证的服务器实现一个 SOAP 客户端。我使用的库(依赖于 ntlm-auth 的 requests-ntlm2)通过标准库的 hashlib 实现了 NTLM 协议核心的 MD4 算法。
虽然hashlib似乎支持MD4:
>>> import hashlib
>>> hashlib.algorithms_available
{'md5-sha1', 'md4', 'shake_128', 'md5', 'blake2s', 'sha3_512', 'ripemd160', 'sha512', 'mdc2', 'blake2b', 'sha3_256', 'sha3_224', 'sha512_224', 'sha1', 'sha384', 'sha256', 'sha224', 'whirlpool', 'sha512_256', 'sha3_384', 'shake_256', 'sm3'}
>>>
Run Code Online (Sandbox Code Playgroud)
我系统中的 openssl 库也是如此:
(victory) C:\code\python\services>openssl
help:
[...]
Message Digest commands (see the `dgst' command for more details)
blake2b512 blake2s256 md4 md5
mdc2 rmd160 sha1 sha224
sha256 sha3-224 sha3-256 sha3-384
sha3-512 sha384 sha512 sha512-224
sha512-256 shake128 shake256 sm3 …Run Code Online (Sandbox Code Playgroud) hashlib ×10
python ×9
hash ×3
python-2.7 ×2
cryptography ×1
dht ×1
frozenset ×1
hmac ×1
linux ×1
math ×1
md5 ×1
ntlm ×1
python-3.x ×1
ripemd ×1
security ×1
sha1 ×1
sha256 ×1
websecurity ×1