我正在尝试用 Javascript 对文件进行 Sha256 处理。我使用FileReader(HTML5)读取文件。我使用 FileReader 中的 readAsBinaryString 函数来传入图像文件。然后,在 FileReader.onload 函数中,我将 evt.target.result 传递给CryptoJs API中的 SHA256 方法。我能够成功获取哈希值,但它不正确。当我传入文本文件时,它工作正常,但图像文件不行。
代码(应该能够将下面的代码复制到 HTML 文件并在 Firefox 上运行 - 按“整个文件”按钮):
<style>
#byte_content {
margin: 5px 0;
max-height: 100px;
overflow-y: auto;
overflow-x: hidden;
}
#byte_range { margin-top: 5px; }
</style>
<input type="file" id="files" name="file" /> Read bytes:
<span class="readBytesButtons">
<button data-startbyte="0" data-endbyte="4">1-5</button>
<button data-startbyte="5" data-endbyte="14">6-15</button>
<button data-startbyte="6" data-endbyte="7">7-8</button>
<button>entire file</button>
</span>
<div id="byte_range"></div><BR>
<div id="byte_content"></div><BR>
<div id="crypto_sha256"></div>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/sha256.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js"></script>
<script>
var sha256; …Run Code Online (Sandbox Code Playgroud) String myText;
UUID.nameUUIDFromBytes((myText).getBytes()).toString();
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码来生成特定文本的代表。例如,“Moien”应始终用“e9cad067-56f3-3ea9-98d2-26e25778c48f”表示,项目重建等任何更改都不应更改该 UUID。
我这样做的原因是我不希望这些特定的文本对人类来说是可读的(可理解的)。
注意:我不需要在散列后重新生成主要文本(例如“Moien”)的能力。
我也有一个替代方法:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest((matcher.group(1)).getBytes("UTF-8"));
String a = Base64.encode(hash);
Run Code Online (Sandbox Code Playgroud)
您认为哪一个更适合我的问题?
我正在尝试使用 CryptoJS 获取大文件(大于 500MB)的校验和,以便浏览器不会崩溃。我已经在使用带有分块功能的 Web Worker。因此,当我迭代块以更新 CryptoJS 以开始创建校验和时,我尝试逐步使用每个块。然而,当我最终确定时,它仍然返回错误的校验和。看起来它只返回最后一个块的校验和,而不是所有块的校验和。你能让我知道我做错了什么吗?
另外,我不必使用 CryptoJS,因为我发现它很慢,但它似乎是唯一可以处理渐进式加密的库。
var sha256 = CryptoJS.algo.SHA256.create(),
sha256Update,
checksum = [],
chunker = function(workerData) {
var file = workerData.fileBlob,
totalFileSize = file.size,
chunkLength = 3145728,
start = 0,
stop = chunkLength,
i = 0, readSlicer,
fileSlicer,
chunk,
chunkUint8,
timerCounter = 0,
hashConvert;
var checker = function() {
start = stop;
stop += chunkLength;
if(start >= totalFileSize) {
console.log("Done reading file!", stop, totalFileSize);
sha256Update.finalize();
console.log("CheckSum : ", sha256Update._hash.toString(CryptoJS.enc.Hex));
return;
}
readBlock(start, chunkLength, file);
}; …Run Code Online (Sandbox Code Playgroud) 我对 Python 还很陌生,想要创建一些将两个字符串哈希在一起的代码。特别是对于我的情况,我想对文件的哈希值和比特币块哈希值进行哈希处理。下面的代码显然不起作用,因为 sha256() 仅接受一个参数。你们知道这件事吗?
谢谢,
from __future__ import print_function
import blocktrail, time, csv, hashlib, sys
client = blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
address = client.address('x')
latest_block = client.block_latest()
hash_list = []
h = latest_block['hash']
sha256 = hashlib.sha256()
BUF_SIZE = 65536
print("test")
with open('entries#x.csv', 'rb') as entriesfile:
buf = entriesfile.read(BUF_SIZE)
while len(buf) > 0:
sha256.update(buf)
buf = entriesfile.read(BUF_SIZE)
print(sha256.hexdigest())
entryhash = sha256.hexdigest()
hashofhe = hashlib.sha256(b'entryhash', 'h')
Run Code Online (Sandbox Code Playgroud) 我对密码学很陌生,想了解哈希算法。
我有以下来源来创建密码的哈希版本,该密码可以存储在我的数据库中。
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
我有一个 .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) sha256 ×10
hash ×5
c# ×2
cryptojs ×2
javascript ×2
python ×2
.net-core ×1
azure ×1
binary ×1
chunking ×1
cryptography ×1
dll ×1
filereader ×1
hmac ×1
java ×1
jwt ×1
php ×1
private-key ×1
python-3.7 ×1
rsa-sha256 ×1
security ×1
uuid ×1
webhooks ×1
xero-api ×1