标签: hashlib

确定是否已在目录中添加,删除或修改任何文件

我正在尝试编写一个Python脚本,它将获取目录中所有文件的md5sum(在Linux中).我相信我已经在下面的代码中完成了.

我希望能够运行它以确保目录中没有文件已更改,并且没有添加任何文件以进行删除.

问题是我是否对目录中的文件进行了更改,然后将其更改回来.我从运行下面的函数得到了不同的结果.(即使我更改了修改后的文件.

谁能解释一下呢.如果你能想到一个解决方法,请告诉我?

def get_dir_md5(dir_path):
    """Build a tar file of the directory and return its md5 sum"""
    temp_tar_path = 'tests.tar'
    t = tarfile.TarFile(temp_tar_path,mode='w')  
    t.add(dir_path)
    t.close()

    m = hashlib.md5()
    m.update(open(temp_tar_path,'rb').read())
    ret_str = m.hexdigest()

    #delete tar file
    os.remove(temp_tar_path)
    return ret_str
Run Code Online (Sandbox Code Playgroud)

编辑: 正如这些优秀的人已经回答,看起来tar包括标题信息,如修改日期.使用zip工作会有什么不同或其他格式吗?

还有其他的解决方法吗?

python md5 tar hashlib tarfile

7
推荐指数
2
解决办法
1685
查看次数

SHA1哈希在openssl和hashlib/pycrypto之间有所不同

为什么使用openssl的哈希值与我在python中得到的哈希值不同?

$ echo "Lorem ipsum" | openssl dgst -sha1 -hex
(stdin)= d0c05753484098c61e86f402a2875e68992b5ca3
$ python
>>> from hashlib import sha1
>>> sha("Lorem ipsum").hexdigest()
'94912be8b3fb47d4161ea50e5948c6296af6ca05'
>>> from Crypto.Hash import SHA
>>> SHA.new("Lorem ipsum").hexdigest()
'94912be8b3fb47d4161ea50e5948c6296af6ca05'
Run Code Online (Sandbox Code Playgroud)

字符串不相同吗?我错过了一些明显的东西吗

编辑:感谢您发现它.从一个文件管道保存的消息,该文件也遭受同样恼人的换行问题.

$ cat message | openssl dgst -sha1 -hex
'keep whacking your head mate, it wont be the same'
$ echo -n $(cat message) | openssl dgst -sha1 -hex
'ok, you got me, for now' 
Run Code Online (Sandbox Code Playgroud)

python openssl hashlib pycrypto

7
推荐指数
2
解决办法
4296
查看次数

将整数转换为随机但可确定的可重复选择

如何将无符号整数(表示用户ID)转换为随机查找但实际上是确定性可重复的选择?必须以相同的概率选择选择(不管输入整数的分布如何).例如,如果我有3个选择,即[0, 1, 2],用户ID 123可以总是随机分配选项2,而用户ID 234可以总是被分配选择1.

需要跨语言和跨平台的算法再现性.除非有更好的方法,否则我倾向于使用哈希函数和模数.这是我有的:

>>> num_choices = 3
>>> id_num = 123
>>> int(hashlib.sha256(str(id_num).encode()).hexdigest(), 16) % num_choices
2
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的稳定Python 3.请注意,这个问题与将字符串转换为随机但确定性可重复的统一概率的相关问题类似但不完全相同.

python random hashlib

7
推荐指数
1
解决办法
529
查看次数

python hashlib和sha512sum工具之间SHA512的区别

我从linux的'sha512sum'工具和python hashlib库中获得了不同的消息摘要.

这是我在Ubuntu 8.10上得到的:

$ echo test | sha512sum
0e3e75234abc68f4378a86b3f4b32a198ba301845b0cd6e50106e874345700cc6663a86c1ea125dc5e92be17c98f9a0f85ca9d5f595db2012f7cc3571945c123  -

$ python
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import hashlib
>>> hashlib.sha512("test").hexdigest()
'ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff'
Run Code Online (Sandbox Code Playgroud)

两者都应该计算字符串"test"的消息摘要,为什么你认为我得到的结果不同?

python digest sha512 hashlib

6
推荐指数
2
解决办法
3799
查看次数

在python中为大文件创建校验和的最快方法

我需要跨网络传输大文件,需要每小时为它们创建校验和.所以产生校验和的速度对我来说至关重要.

不知怎的,我不能让zlib.crc32和zlib.adler32在Windows XP Pro 64bit机器上使用大于4GB的文件.我怀疑我在这里达到了32位的限制?使用hashlib.md5我可以得到一个结果,但问题是速度.为4.8GB文件生成md5大约需要5分钟.任务管理器显示该进程仅使用一个核心.

我的问题是:

  1. 有没有办法让crc适用于大文件?我更喜欢使用crc而不是md5
  2. 如果没有那么有没有办法加快md5.hexdigest()/ md5.digest?或者在这种情况下任何hashlib hexdigest/digest?可能将其拆分为多线程进程?我怎么做?

PS:我正在开发类似于"资产管理"系统的东西,有点像svn,但资产包括大型压缩图像文件.文件有微小的增量变化.检测变化和错误检测需要散列/校验和.

python crc32 multithreading md5 hashlib

6
推荐指数
2
解决办法
1万
查看次数

将hexdigest()的结果与字符串进行比较

我有一个生成的MD5哈希,我想将其与字符串中的另一个MD5哈希进行比较.下面的陈述是错误的,即使它们在打印时看起来一样,应该是真的.

hashlib.md5("foo").hexdigest() == "acbd18db4cc2f85cedef654fccc4a4d8"
Run Code Online (Sandbox Code Playgroud)

谷歌告诉我,我应该对结果进行编码hexdigest(),因为它不会返回字符串.但是,下面的代码似乎也不起作用.

hashlib.md5("foo").hexdigest().encode("utf-8") == "foo".encode("utf-8")
Run Code Online (Sandbox Code Playgroud)

python python-2.x string-comparison hashlib

6
推荐指数
2
解决办法
2万
查看次数

安全地覆盖RAM中的Python变量?

我正在用Python创建一个涉及散列密码的程序.假设我使用它来获取密码:

import getpass
password = getpass.getpass("Password: ")
Run Code Online (Sandbox Code Playgroud)

然后散列它,有没有办法从RAM中安全地删除所有未散列密码的痕迹?

python memory security hashlib

6
推荐指数
1
解决办法
1647
查看次数

将字符串转换为随机但确定性可重复的均匀概率

如何将字符串(例如用户ID加盐)转换为随机查找但实际上是半开放范围内的确定性可重复均匀概率[0.0,1.0]?这意味着输出≥0.0且<1.0.无论输入分布如何,输出分布必须是均匀的.例如,如果输入字符串是'a3b2Foobar',则输出概率可以重复为0.40341504.

需要跨语言和跨平台的算法再现性.除非有更好的方法,否则我倾向于使用哈希函数.这是我有的:

>>> in_str = 'a3b2Foobar'
>>> (int(hashlib.sha256(in_str.encode()).hexdigest(), 16) % 1e8) / 1e8
0.40341504
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的稳定Python 3.请注意,这个问题与将整数转换为随机但可确定的可重复选择的相关问题类似但不完全相同.

python random hashlib

6
推荐指数
1
解决办法
1030
查看次数

Marvel API 调用中的哈希、时间戳和键组合无效

我正在尝试形成一个 Marvel API 调用。

这是授权链接:https : //developer.marvel.com/documentation/authorization

我正在尝试创建服务器端应用程序,因此根据上面的链接,我需要时间戳、apikey 和哈希 url 参数。散列需要是以下形式的 md5 散列:md5(timestamp + privateKey + publicKey) 并且 apikey url 参数是我的公钥。

这是我的代码,我在 Python 3 中发出请求,使用请求库来形成请求,使用时间库来形成时间戳,以及使用 hashlib 库来形成哈希。

#request.py: making a http request to marvel api

import requests;
import time;
import hashlib;


#timestamp
ts = time.time();
ts_str = str(float(ts));


#keys
public_key = 'a3c785ecc50aa21b134fca1391903926';
private_key = 'my_private_key';

#hash and encodings
m_hash = hashlib.md5();
ts_str_byte = bytes(ts_str, 'utf-8');
private_key_byte = bytes(private_key, 'utf-8');
public_key_byte = bytes(public_key, 'utf-8');
m_hash.update(ts_str_byte + private_key_byte + public_key_byte);
m_hash_str …
Run Code Online (Sandbox Code Playgroud)

timestamp request hashlib python-3.x

6
推荐指数
1
解决办法
2679
查看次数

如何在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
查看次数