标签: hashlib

无法导入"hashlib"

我正在尝试加密sha1中的字符串,我从服务器收到错误:

"No Module Named hashlib"
Run Code Online (Sandbox Code Playgroud)

通过使用以下代码:


import hashlib
encrypted = hashlib.sha1(string)
encrypted = encrypted.digest()
Run Code Online (Sandbox Code Playgroud)

我会感激任何帮助,

谢谢,盖伊多尔

python encryption hash sha1 hashlib

5
推荐指数
1
解决办法
7517
查看次数

Hashlib哈希没有正确比较

继承我的代码:

import hashlib

real = hashlib.sha512("mom")

status = True

while status:
    inp = raw_input("What's the password?")
    converted = hashlib.sha512(inp)

    if converted == real:
        print "Access granted!"
        status = False
    else:
        print "Access denied."
Run Code Online (Sandbox Code Playgroud)

我是hashlib的新手,我只是在玩它.我认为这样做会验证用户输入实际密码的哈希值,但是如果输入正确的密码,它仍会出现"访问被拒绝".谁能指出我正确的方向?

python hash hashlib

5
推荐指数
1
解决办法
2968
查看次数

散列函数可以防止冲突,而不是攻击.(生成随机UUID大小的结果空间)

使用SHA1散列较大的字符串,以便它们可以用作数据库中的键.

尝试从原始字符串生成UUID大小的字符串,该字符串足够随机且足够大以防止冲突,但比原始字符串小得多.

不使用此安全相关的任何东西.

例:

# Take a very long string, hash it down to a smaller string behind the scenes and use
#     the hashed key as the data base primary key instead
def _get_database_key(very_long_key):
    return hashlib.sha1(very_long_key).digest()
Run Code Online (Sandbox Code Playgroud)

SHA1是一个很好的算法用于此目的吗?或者还有其他更合适的东西吗?

python hash sha1 hashlib

5
推荐指数
1
解决办法
347
查看次数

Hashlib:要在 md5.update() 中使用的最佳块大小

这是参考Get MD5 hash of big files in Python and Hashlib in Windows and Linux

针对这两个问题,建议在函数 md5.update() 中使用更大的数据块来提高性能。

我所做的所有测试似乎都表明使用较小的块可以提供最佳性能。

考虑以下代码:

def test(factor):
    filehash = hashlib.md5()
    blk_size_to_read = filehash.block_size * (2**factor)
    with open(largetestfile, 'rb') as f:
        read_data = f.read(blk_size_to_read)
        filehash.update(read_data)
    filehash.digest()

if __name__ == '__main__':
    for ctr in xrange(0, 12):
        funcstr = "test({})".format(str(ctr))
        timetaken = timeit.timeit(funcstr, setup="from __main__ import test", number = 5000)
        print "Factor: {} Time: {}".format(str(ctr), str(timetaken))
Run Code Online (Sandbox Code Playgroud)

我所做的所有测试都表明,使用factor0 或 1(即 64 或 128 字节)时可实现最佳性能。

为什么我看到的结果与引用的问题中指出的结果不同?

我尝试过大小​​从 700MB …

python md5 hashlib

5
推荐指数
1
解决办法
3423
查看次数

有没有比这更快的方法来计算 Python 中文件的哈希值(使用 hashlib)?

我目前的做法是这样的:

def get_hash(path=PATH, hash_type='md5'):
    func = getattr(hashlib, hash_type)()
    with open(path, 'rb') as f:
         for block in iter(lambda: f.read(1024*func.block_size, b''):
             func.update(block)
    return func.hexdigest()
Run Code Online (Sandbox Code Playgroud)

在 i5 @ 1.7 GHz 上计算 842MB iso 文件的 md5sum 大约需要 3.5 秒。我尝试了不同的读取文件的方法,但所有这些方法都会产生较慢的结果。也许有更快的解决方案?

编辑:我用 替换了2**16(在 内f.read()1024*func.block_size,因为block_sizehashlib 支持的大多数散列函数的默认值是64(除了 'sha384' 和 'sha512' - 对于它们,默认值block_size128)。因此,块大小仍然相同(65536 位)。

编辑(2):我做错了什么。它需要 8.4 秒而不是 3.5 秒。:(

编辑(3):当我再次运行该函数时,显然 Windows 正在以 +80% 的速度使用磁盘。真的需要3.5秒。呼。

另一个解决方案(~-0.5 秒,稍微快一点)是使用 os.open():

def get_hash(path=PATH, hash_type='md5'):
    func = getattr(hashlib, hash_type)()
    f …
Run Code Online (Sandbox Code Playgroud)

python hashlib

5
推荐指数
1
解决办法
1587
查看次数

如何使用 python 中现有的哈希器更新 hashlib.md5 哈希器?

我有哈希器的缓存实例:

m1 = hashlib.md5()
m1.update(b'very-very-long-data')
cached_sum = m1
Run Code Online (Sandbox Code Playgroud)

我想用之前缓存的总和更新外部哈希器:

def append_cached_hash(external_hasher):
    # something like this
    external_hasher.update(cached_sum)
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用,因为 update() 需要字节。我可以再次传递相同的“非常非常长的数据”字节,但它拒绝了为常见的长数据对象预缓存 md5 和的整个想法。

我可以做如下的事情:

external_hasher.update(cached_sum.hexdigest())
Run Code Online (Sandbox Code Playgroud)

但是,它不会产生与以下相同的所需结果:

external_hasher.update(b'very-very-long-data')
Run Code Online (Sandbox Code Playgroud)

我该如何实现上面的功能呢?


同样的问题可以有不同的表述。有3个大数据集,需要使用python计算所有可能组合的md5和。允许每个数据源计算一次md5。

m1 = hashlib.md5(b'very-big-data-1')
m2 = hashlib.md5(b'very-big-data-2')
m3 = hashlib.md5(b'very-big-data-3')
Run Code Online (Sandbox Code Playgroud)

下面的打印函数的第二个参数应该写什么才能达到目的?

print("sum for data 1 and data 2 is:", m1.update(m2))
print("sum for data 1 and data 3 is:", m1.update(m3))
print("sum for data 2 and data 3 is:", m2.update(m3))
print("sum for data 1, data 2 and data 3 is:", m1.update(m2.update(m3)))
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

python md5 hashlib md5sum

5
推荐指数
1
解决办法
3149
查看次数

UnicodeDecodeError:'utf-8'编解码器无法解码位置1中的字节0xe3:无效的连续字节

我想将一个字节变量转换为字符串.当然,以前有一些与我有关的问题.但是,尝试以这种方式在md5()中散列文件的内容:

import hashlib
with open("C:\\boot.ini","r") as f:
    r=f.read()
a=hashlib.md5()
a.update(r.encode('utf8'))
bytes_data=a.digest()
print(bytes_data)
r=type(bytes_data)
print(r) # <-- Just to be sure, it is in bytes 
myString=bytes_data.decode(encoding='UTF-8')
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 1: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

由于这个问题,我理解我的问题的原因,但是我正在处理不同的文件来计算它们的哈希,所以我无法控制字节,那么我该如何解决这个问题呢?

python hashlib python-3.x

5
推荐指数
1
解决办法
4551
查看次数

使用pandas将唯一数字转换为md5哈希

大家早上好.

我想将我的社会安全号码转换为md5哈希十六进制数字.结果应该是每个社会安全号码的唯一md5哈希十六进制数.

我的数据格式如下:

ob = onboard[['regions','lname','ssno']][:10]
ob

    regions lname   ssno
0    Northern Region (R1)    Banderas    123456789
1    Northern Region (R1)    Garfield    234567891
2    Northern Region (R1)    Pacino  345678912
3    Northern Region (R1)    Baldwin     456789123
4    Northern Region (R1)    Brody   567891234
5    Northern Region (R1)    Johnson     6789123456
6    Northern Region (R1)    Guinness    7890123456
7    Northern Region (R1)    Hopkins     891234567
8    Northern Region (R1)    Paul    891234567
9    Northern Region (R1)    Arkin   987654321
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码hashlib:

import hashlib

ob['md5'] = hashlib.md5(['ssno'])
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,它必须是一个字符串而不是列表.所以我尝试了以下方法:

ob['md5'] …
Run Code Online (Sandbox Code Playgroud)

python hashlib python-2.7 pandas pandasql

5
推荐指数
1
解决办法
4912
查看次数

如何在Python3和Mac/Linux终端中获得相同的哈希?

如何在终端(Mac/Linux)和Python中获得相同的sha256哈希?

尝试了以下示例的不同版本,并在StackOverflow上搜索.

终奌站:

echo 'test text' | shasum -a 256
Run Code Online (Sandbox Code Playgroud)

c2a4f4903509957d138e216a6d2c0d7867235c61088c02ca5cf38f2332407b00

Python3:

import hashlib
hashlib.sha256(str("test text").encode('utf-8')).hexdigest()
Run Code Online (Sandbox Code Playgroud)

'0f46738ebed370c5c52ee0ad96dec8f459fb901c2ca4e285211eddf903bf1598'

更新:与为什么Python创建的MD5哈希与使用echo和md5sum在shell中创建的哈希不同?因为在Python3中你需要显式编码,我需要Python中的解决方案,而不仅仅是在终端中."复制"不适用于文件:

example.txt内容:

test text
Run Code Online (Sandbox Code Playgroud)

终奌站:

shasum -a 256 example.txt
Run Code Online (Sandbox Code Playgroud)

c2a4f4903509957d138e216a6d2c0d7867235c61088c02ca5cf38f2332407b00

python macos hashlib python-3.x

5
推荐指数
1
解决办法
213
查看次数

Instagram 使用端点抓取需要对所有请求进行身份验证

如您所知,Instagram 宣布他们本月更改了端点 api。看起来在 Cambridge Analytica instagram 之后改变了他们的端点格式,并要求所有请求都需要登录用户会话......

不确定哪些端点需要更新,但我特别使用了媒体/评论端点,现在如下:

旧媒体:

https://www.instagram.com/graphql/query/?query_id=17888483320059182&id= {0}&first=100&after={1}

媒体新:

https://www.instagram.com/graphql/query/?query_hash=42323d64886122307be10013ad2dcc44&variables=%7B%22id%22%3A%2221575514%22%2C%22first%22%3A12%2C%22after%22%3A%22AQAHXuz1DPmI3FFLOzy5iKEhHOLKw3lt_ozVR40TphSdns0Vp5j_ZEU6Qj0CW6IqNtVGO5pmLCQoX0Y8RVS9aRTT2lWPp6vf8vFqjo1QfxRYmA% 22%7D

我用来避免这个问题的脚本如下:

#!/usr/bin/env python3
import requests
import urllib.parse
import hashlib
import json

#CHROME_UA = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
CHROME_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'

def getSession_old(rhx_gis, csrf_token, variables):
    """ Get session preconfigured with required headers & cookies. """
    #"rhx_gis:csfr_token:user_agent:variables"
    print(variables)
    values = "%s:%s:%s:%s" % (
            rhx_gis,
            csrf_token,
            CHROME_UA,
            variables)
    x_instagram_gis = …
Run Code Online (Sandbox Code Playgroud)

md5 hashlib web-scraping python-3.x instagram-api

5
推荐指数
0
解决办法
779
查看次数