我对密码学很陌生,想了解哈希算法。
我有以下来源来创建密码的哈希版本,该密码可以存储在我的数据库中。
public static string hashPasswordGenerator(string password)
{
System.Security.Cryptography.SHA256Managed crypt = new System.Security.Cryptography.SHA256Managed();
StringBuilder hash = new StringBuilder();
byte[] cry = crypt.ComputeHash(Encoding.UTF8.GetBytes(password), 0, Encoding.UTF8.GetByteCount(password));
return Convert.ToBase64String(cry);
}
Run Code Online (Sandbox Code Playgroud)
我的示例用户User1使用密码Password1,这返回哈希版本GVE/3J2k+3KkoF62aRdUjTyQ/5TVQZ4fI2PuqJ3+4d0=
我的问题是:
- 这安全吗?
- 我应该加盐吗?如果是这样,有人可以给我看一个简单的例子,因为我真的不明白它是如何生成盐的,以便它每次都会匹配密码?
- 如果有人有这个 hashPasswordGenerator 方法,他们可以对我的密码进行逆向工程吗?
提前致谢。
我想用 PHP 计算大文件的 SHA256。目前,我正在使用 Amazon Glacier 来存储旧文件及其 API 来上传存档。最初,我只是使用无法达到 MB 大小图像的小文件。当我尝试上传超过 1MB 的文件时,API 响应说我给他们的校验和与他们计算的不同。
\n\n这是我上传文件的代码:
\n\n//get the sha256 using the file path\n$image = //image path;\n$sha256 = hash_file("sha256", $image);\n\n$archive = $glacier->uploadArchive([\n \'accountId\' => \'\', \n \'body\' => "",\n \'checksum\' => $sha256,\n \'contentSHA256\' => $sha256,\n \'sourceFile\' => $image,\n \'vaultName\' => \'my-vault\'\n ]);\nRun Code Online (Sandbox Code Playgroud)\n\n和错误:
\n\nAWS HTTP error: Client error: `POST https://glacier.us-west-2.amazonaws.com/vaults/70/archives` resulted in a `400 Bad Request` response:{"code":"InvalidParameterValueException","message":"Checksum mismatch: expected 9f1d4da29b6ec24abde48cb65cc32652ff589467 (truncated...)\n
我尝试了如下函数来检查最终的哈希值,但当我打印它时,它似乎不是正确的哈希值:
\n\nprivate function getFinalHash($file)\n{\n $fp …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 python 对 JWT 进行编码,我需要用 base64 对其进行编码,我就是这么做的。然后我必须在发送到服务器之前用私钥对其进行签名。其实我被屏蔽了,什么时候签名我不知道怎么办,我从昨天开始就在网上搜索,我有点迷失了。这是我的代码。
import jwt
print ("\nStart..")
encoded = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
print("\nJWT : ",encoded)
try:
decoded = jwt.decode(encoded, 'secret', algorithms=['HS256'])
except jwt.InvalidTokenError:
print("Invalid token!!")
print("\ndecoded : ", decoded)
print("\nencodage : ")
#LOAD THE PRIVATE KEY
#SIGN THE ENCODED token
Run Code Online (Sandbox Code Playgroud)
还有我的密钥的格式,它是 RSA 私钥。
-----BEGIN RSA PRIVATE KEY-----
dsjkfhsdfkshkdfhks...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
我向服务器 crt.crt 提供了一个证书,我认为我需要用我的私钥进行加密,然后他们将能够使用证书中的密钥来解密消息,这就是我的理解。
预先感谢,G.B
我一直试图弄清楚为什么 bash 中的命令生成的签名与在线转换器以及我的 java 代码不同。
在线和Java中,value =“value”和key =“key”生成以下十六进制sha256签名:90fbfcf15e74a36b89dbdb2a721d9aecffdfdddc5c83e27f7592594f71932481
或者
然而在 bash 中它会产生以下输出:
有谁知道什么会导致这种差异?哪一个不正确或者是以不同的格式打印的?
我安装了 Crypto 模块和 SHA256 但显示 ModuleNotFoundError :-
回溯(最近一次调用最后一次):文件“Digitalsig.py”,第 1 行,来自 Crypto.Hash import SHA256 ModuleNotFoundError:没有名为“Crypto”的模块
这是参考代码
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto import Random
random_generator = Random.new().read
#used to generate a keypair which contain a public and private key
keyPair = RSA.generate(1024,random_generator)
pubKey = keyPair.publicKey()
plainText = 'Hello World'
hashA = SHA256.new(plainText).digest()
digitalSignature = keyPair.sign(hashA,'')
print("Hash A: "+repr(hashA) + "\n");
print("Digital Signature: " + repr(digitalSignature) + "\n")
#Bob receives the plainText and digitalSignature from Alice
#plainTextChanged ='Hello …Run Code Online (Sandbox Code Playgroud) 我有一个 .net core 应用程序作为控制台,我正在尝试从 Azure Db 获取一些值。该代码在 .NET Framework(标准)上完美运行,我总是能获取数据,但我需要使用 .NET Core。简而言之,我有一种从另一个(.dll)获取配置的方法,每次遇到异常时:
System.AggregateException: 'One or more errors occurred. (Could not load type 'System.Security.Cryptography.SHA256Cng' from assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.)'
Run Code Online (Sandbox Code Playgroud)
我知道.NET Core有System.Core,但它没有“SHA256Cng”,只有“SHA256”。也许我可以使用 .net Framework .dll 还是有其他方法来解决这个问题?附言。仅需要使用 .NET Core(.net 控制台应用程序和其他)。
public ITenantConfigurationProvider CreateTenantConfigurationProvider(ITenantClient client, string tenantId)
{
return client.GetConfigAsync(tenantId).Result;
}
Run Code Online (Sandbox Code Playgroud) 我使用在线 SHA256 转换器来计算给定文件的哈希值。在那里,我看到了我不明白的效果。
出于测试目的,我想计算一个非常简单的文件的哈希值。我将其命名为“test.txt”,其唯一内容是字符串“abc”,后面是一个新行(我刚刚按了 Enter)。
现在,当我将“abc”和换行符放入 SHA256 生成器时,我得到了哈希值
edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb
但是当我将完整的文件放入同一个生成器中时,我得到了哈希值
552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025
差异从何而来?我使用了这个生成器(事实上,我尝试了几个生成器,它们总是产生相同的结果):
https://emn178.github.io/online-tools/sha256_checksum.html
请注意,如果没有换行符,则不会出现这种差异。如果文件仅包含字符串“abc”,则哈希为
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
对于文件以及内容。
根据此处的说明 ( https://developer.xero.com/documentation/webhooks/configuring-your-server ) 设置和验证 Xero webhook 的接收意图。
计算出的签名应与标头中的签名匹配,以获得正确签名的有效负载。
但是,使用 python 3,计算出的签名与标头中的签名根本不匹配。Xero 会向订阅 webhook url 发送大量请求,无论正确还是错误。在我的日志中,所有这些请求都返回为 401。因此,下面是我的测试代码,也被证明不匹配。我不知道缺少什么或者我做错了什么。不要担心这里显示的密钥,我已经生成了另一个密钥,但这是分配给我用于此时散列的密钥。根据他们的指示,运行此代码应该使签名与标头之一匹配。但根本不接近。
XERO_KEY =
"lyXWmXrha5MqWWzMzuX8q7aREr/sCWyhN8qVgrW09OzaqJvzd1PYsDAmm7Au+oeR5AhlpHYalba81hrSTBeKAw=="
def create_sha256_signature(key, message):
message = bytes(message, 'utf-8')
return base64.b64encode(hmac.new(key.encode(), message,
digestmod=hashlib.sha256).digest()).decode()
# first request header (possibly the incorrect one)
header = "onoTrUNvGHG6dnaBv+JBJxFod/Vp0m0Dd/B6atdoKpM="
# second request header (possibly the correct one)
header = "onoTrUNvGHG6dnaBv+JBJxFodKVp0m0Dd/B6atdoKpM="
payload = {
'events':[],
'firstEventSequence':0,
'lastEventSequence':0,
'entropy':
'YSXCMKAQBJOEMGUZEPFZ'
}
payload = json.dumps(payload, separators=(",", ":")).strip()
signature = create_sha256_signature(XERO_KEY, str(payload))
if hmac.compare_digest(header, signature):
print(True)
return 200
else:
print(False)
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试计算 Groovy 版本 2.4.16 中的 sha256 哈希值。这是 jmeter 测试的一部分,这是它支持的 Groovy 版本,我认为我无法更改它。我知道在 Groovy 2.5 中您可以使用如下代码:
def challenge = verifier.digest('SHA-256');
log.info 'challenge' + challenge
Run Code Online (Sandbox Code Playgroud)
但这在 2.4 中不起作用/不存在。我怎样才能在 Groovy 2.4 中做到这一点?
我用上面的代码得到的错误是:
javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: java.lang.String.digest() is applicable for argument types: (java.lang.String) values: [SHA-256]
Possible solutions: getAt(java.lang.String), next(), size(), toSet(), size(), toList()
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.16.jar:2.4.16]
at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_221]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:223) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44) [ApacheJMeter_components.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:935) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:537) [ApacheJMeter_core.jar:5.1.1 r1855137] …Run Code Online (Sandbox Code Playgroud) 我正在rsync用 Python 编写一个类似玩具的工具。与许多类似的工具一样,它首先使用非常快的哈希作为滚动哈希,然后在找到匹配项后使用 SHA256(但后者不在此处的主题:SHA256、MDA5 等作为滚动哈希太慢)哈希)。
我目前正在测试各种快速哈希方法:
import os, random, time
block_size = 1024 # 1 KB blocks
total_size = 10*1024*1024 # 10 MB random bytes
s = os.urandom(total_size)
t0 = time.time()
for i in range(len(s)-block_size):
h = hash(s[i:i+block_size])
print('rolling hashes computed in %.1f sec (%.1f MB/s)' % (time.time()-t0, total_size/1024/1024/(time.time()-t0)))
Run Code Online (Sandbox Code Playgroud)
我得到:0.8 MB/s ...所以Python内置hash(...)函数在这里太慢了。
哪种解决方案可以在标准机器上实现至少 10 MB/s 的更快哈希值?
我尝试过
import zlib
...
h = zlib.adler32(s[i:i+block_size])
Run Code Online (Sandbox Code Playgroud)
但也好不了多少(1.1 MB/s)
我尝试过sum(s[i:i+block_size]) % modulo,它也很慢
有趣的事实:即使没有任何哈希函数,循环本身也很慢!
t0 = …Run Code Online (Sandbox Code Playgroud)sha256 ×10
hash ×3
python ×3
c# ×2
cryptography ×2
hmac ×2
rsa-sha256 ×2
.net-core ×1
azure ×1
bash ×1
dll ×1
for-loop ×1
groovy ×1
jmeter ×1
jmeter-5.0 ×1
jwt ×1
openssl ×1
php ×1
private-key ×1
pycrypto ×1
python-3.7 ×1
security ×1
webhooks ×1
xero-api ×1