标签: hashlib

python(django)hashlib vs Nodejs crypto

我正在将Django站点移植到Node.js,我正在尝试在Node中重新实现Django set password方法.这是Django代码

from django.utils.crypto import (
    pbkdf2, get_random_string)

import hashlib

password = 'text1'
algorithm = "pbkdf2_sha256"
iterations = 10000
salt = 'p9Tkr6uqxKtf'
digest = hashlib.sha256
hash = pbkdf2(password, salt, iterations, digest=self.digest)
hash = hash.encode('base64').strip()
print "%s$%d$%s$%s" % (self.algorithm, iterations, salt, hash)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的Node.js代码:

var password = 'text1';
var hashed = crypto.createHash('sha256').update(password, 'utf8').digest();
var salt = 'p9Tkr6uqxKtf';
var algorithm = "pbkdf2_sha256";
var iterations = 10000;
crypto.pbkdf2(hashed, salt, iterations, 32, function(err, encodedPassword) {
    var newPass = new Buffer(encodedPassword).toString('base64');
    console.log(encodedPassword);

    // console.log(Buffer(encodedPassword, 'binary').toString('hex')); …
Run Code Online (Sandbox Code Playgroud)

python django hashlib node.js passport.js

10
推荐指数
1
解决办法
1853
查看次数

hashlib.scrypt 的推荐/最小参数是什么?

的文档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)今天被认为是安全的吗?如何判断采用哪些参数?

python security password-hash hashlib websecurity

10
推荐指数
1
解决办法
1828
查看次数

为什么hashlib和hmac生成不同的哈希值?

在Python 2.7中,

my = "my"
key = "key"
print(hashlib.sha256(my + key).hexdigest())
print(hmac.new(my, key, hashlib.sha256).hexdigest())
Run Code Online (Sandbox Code Playgroud)

输出,

5e50f405ace6cbdf17379f4b9f2b0c9f4144c5e380ea0b9298cb02ebd8ffe511
15a55993a27e0de7a4c4daa67a7c219199a464ca283797f545b783cce07b38a5
Run Code Online (Sandbox Code Playgroud)

还是我误解了?

python hmac hashlib

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

hashlib/md5.与python 2.4的兼容性

python 2.6报告md5模块已过时,应使用hashlib.如果我import md5改为import hashlib我将解决python 2.5和python 2.6,但不适用于python 2.4,它没有hashlib模块(导致ImportError,我可以捕获).

现在,要修复它,我可以执行try/catch,并定义一个getMd5()函数,以便根据try块的结果定义一个合适的函数.这个解决方案好吗?

你会如何在一个更一般的情况下解决这个问题,例如:你有两个不同的库具有相同的目标但不同的界面,你想要使用一个,但如果第一个没有,则退回并使用另一个找到.

python import md5 backwards-compatibility hashlib

8
推荐指数
1
解决办法
5844
查看次数

持久化 hashlib 状态

我想创建一个hashlib实例,update()然后以某种方式保留其状态。稍后,我想使用此状态数据重新创建对象,并继续update()它。最后,我想获得hexdigest()累计数据的总和。状态持久性必须在多次运行中保持不变。

例子:

import hashlib
m = hashlib.sha1()
m.update('one')
m.update('two')
# somehow, persist the state of m here

#later, possibly in another process
# recreate m from the persisted state
m.update('three')
m.update('four')
print m.hexdigest()
# at this point, m.hexdigest() should be equal to hashlib.sha1().update('onetwothreefour').hextdigest()
Run Code Online (Sandbox Code Playgroud)

编辑:

2010 年,我没有找到使用 python 实现此目的的好方法,最终用 C 语言编写了一个小型辅助应用程序来实现此目的。然而,下面有一些我当时无法获得或不知道的很好的答案。

python hash persistence pickle hashlib

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

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

我正在尝试编写一个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
查看次数

HMAC在Python中签名请求

我正在尝试使用请求库在Python 3.4中为API调用创建HMAC-SHA512签名请求.我正在尝试关注文档,但是我遇到了这个错误:

AttributeError: '_hashlib.HASH' object has no attribute 'new'
Run Code Online (Sandbox Code Playgroud)

这是一些代码.它失败了hmac构造函数的错误.如果我尝试传递hashlib.md5()或完全省略摘要参数,那就没问题.

我不确定我之后是否正确签署了请求,因为我还没有那么远.我试图使用的服务的文档说我用我的秘密签署URL.我需要这个字节串才能使用.

import hmac
import hashlib
import requests

secret = b'mysecret'
url = b'http://someurl.com/something/'

signing = hmac.new(secret, url, hashlib.sha512())

headers = {'apisign': signing.digest()}
response = requests.get(url, headers=headers)
Run Code Online (Sandbox Code Playgroud)

任何指针赞赏.我找不到一个例子.谢谢!

python hmac hashlib python-requests

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

Python SHA1整数

我在C代码中做了两个SHA1,一个是字符串,另一个是整数,得到不同的结果.

SHA_init(&ctx);
SHA_update(&ctx, "1234", 4);
sha = SHA_final(&ctx);

unsigned n = 1234;
SHA_init(&ctx);
SHA_update(&ctx, &n, sizeof(n));
sha = SHA_final(&ctx);

string  result:  7110eda4d09e62aa5e4a390b0a572acd2c220
integer result:  c7f07b846cc46631c2079cdd7179afdd783d643
Run Code Online (Sandbox Code Playgroud)

在python中,很容易得到字符串SHA1

sha1 = hashlib.sha1()
sha1.update('1234')
sha1.hexdigest()

'7110eda4d09e062aa5e4a390b0a572ac0d2c0220'
Run Code Online (Sandbox Code Playgroud)

我们可以看到字符串结果与C代码相同.但是如何在python中获取整数SHA1?因为python sha1不支持整数.

我尝试了以下代码,但它无法获得与C代码相同的结果.

aint = unpack('>4B', pack('>I', 1234))   
sha1 = hashlib.sha1()
sha1.update(bytearray(aint))
sha1.hexdigest()
Run Code Online (Sandbox Code Playgroud)

'ac9928e78cf6ea117451ecd6654fea2adae73e21'

如何在python中执行整数SHA1?

python sha1 hashlib

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

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

如何将无符号整数(表示用户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
查看次数