标签: sha256

哈希算法SHA256,我的方法安全吗?如何添加盐值以使其更安全

我对密码学很陌生,想了解哈希算法。

我有以下来源来创建密码的哈希版本,该密码可以存储在我的数据库中。

    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=

我的问题是:

  1. 这安全吗?
  2. 我应该加盐吗?如果是这样,有人可以给我看一个简单的例子,因为我真的不明白它是如何生成盐的,以便它每次都会匹配密码?
  3. 如果有人有这个 hashPasswordGenerator 方法,他们可以对我的密码进行逆向工程吗?

提前致谢。

c# security hash cryptography sha256

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

如何在php中计算大文件的SHA256

我想用 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    ]);\n
Run Code Online (Sandbox Code Playgroud)\n\n

和错误:

\n\n

AWS 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\n

我尝试了如下函数来检查最终的哈希值,但当我打印它时,它似乎不是正确的哈希值:

\n\n
private function getFinalHash($file)\n{\n    $fp …
Run Code Online (Sandbox Code Playgroud)

php hash sha256

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

如何在 python 中使用 RSA SHA-256 签署令牌?

我正在尝试用 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

python sha256 jwt private-key rsa-sha256

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

OpenSSL | dgst -sha256 -hmac 与在线和java中的签名不同

我一直试图弄清楚为什么 bash 中的命令生成的签名与在线转换器以及我的 java 代码不同。

在线和Java中,value =“value”和key =“key”生成以下十六进制sha256签名:90fbfcf15e74a36b89dbdb2a721d9aecffdfdddc5c83e27f7592594f71932481

在此输入图像描述

或者

在此输入图像描述 从在线工具到我的 java 代码,这是全面的。

然而在 bash 中它会产生以下输出:

在此输入图像描述

有谁知道什么会导致这种差异?哪一个不正确或者是以不同的格式打印的?

在线转换器 1在线转换器 2

bash openssl sha256 hmac

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

ModuleNotFoundError:没有名为“Crypto”的模块

我安装了 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)

python cryptography sha256 pycrypto rsa-sha256

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

系统.安全.加密.SHA256Cng .NET Core

我有一个 .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)

c# dll sha256 azure .net-core

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

文件和该文件内容的 SHA256 生成不同

我使用在线 SHA256 转换器来计算给定文件的哈希值。在那里,我看到了我不明白的效果。

出于测试目的,我想计算一个非常简单的文件的哈希值。我将其命名为“test.txt”,其唯一内容是字符串“abc”,后面是一个新行(我刚刚按了 Enter)。

现在,当我将“abc”和换行符放入 SHA256 生成器时,我得到了哈希值

edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

但是当我将完整的文件放入同一个生成器中时,我得到了哈希值

552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025

差异从何而来?我使用了这个生成器(事实上,我尝试了几个生成器,它们总是产生相同的结果):

https://emn178.github.io/online-tools/sha256_checksum.html

请注意,如果没有换行符,则不会出现这种差异。如果文件仅包含字符串“abc”,则哈希为

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

对于文件以及内容。

sha256

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

如何使用 HMACSHA256 python 3 验证 Xero webhook 有效负载

根据此处的说明 ( 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)

sha256 hmac webhooks xero-api python-3.7

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

如何在 Groovy 2.4 中计算 sha256 哈希值

我正在尝试计算 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)

groovy jmeter sha256 jmeter-5.0

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

Python 中的滚动哈希非常快?

我正在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 的更快哈希值?

python hash for-loop sha256 rolling-computation

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