标签: sha256

小端数据和sha 256

我必须以小端形式生成sha256数据哈希.在使用sha 256算法之前,我想知道是否必须先将其转换为big endian.或者,如果算法是"与endian无关"的.

编辑:对不起,我想我不清楚.我想知道的是:sha256算法需要用某些位填充消息的结尾.第一步是在消息的末尾添加1.然后,用零填充它直到结束.最后,您必须以位为单位添加消息的长度.我想知道的是这个填充是否可以用小端进行.例如,对于640位消息,我可以将最后一个字写为0x280(大端)或0x8002000(小端).这个填充可以用小端进行吗?

endianness sha256

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

Rails:上传文件的校验和

我在Ruby on Rails中生成上传图像的校验和(sha256).

upload = params[:file]
data1 = upload.read
data2 = File.read(upload.tempfile)
checksum1 = Digest::SHA256.hexdigest(data1)
checksum2 = Digest::SHA256.hexdigest(data2)
puts checksum1
puts checksum2
Run Code Online (Sandbox Code Playgroud)

最后两个语句返回不同的值.checksum1是通过使用UploadedFile对象读取数据生成的.checksum2是通过从文件系统读取临时文件生成的.

ActionDispatch :: Http :: UploadedFile的对象是否返回比上传文件的内容更多的内容?当我生成写入文件系统的上传文件的校验和时,它与checksum2(临时文件校验和)匹配,而不是与checksum1(UploadedFile.read)匹配.

我假设通过从文件系统读取临时文件生成的校验和更可靠,因为对象(UploadedFile)实现可能会更改.如果需要,可以更轻松地生成文件系统上现有文件的校验和.

那么,校验和差异的原因是什么,哪一个更可靠?

谢谢.


更新1:根据@ pablo-castellazzi的建议,我使用Digest :: SHA256.file(upload.path).hexdigest生成哈希.我们称之为校验和3

checksum3等于checksum1但与checksum2不同


更新2:如果我使用二进制模式读取@ Arsen7提到的文件,那么所有校验和都是相同的.

windows checksum file-upload ruby-on-rails sha256

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

在Zend Server CE 5.5中使用sha256的PHP crypt()会截断提供的salt

在从Zend Server CE 5.1升级到Zend Server CE 5.5期间,PHP也从5.3.5升级到5.3.8.在此转换之后,我正在处理的zend应用程序的登录功能突然中断.

试图调试它,看起来好像执行crypt()不反映PHP手册,或者我误解了它.如果我冒险猜测,那就是后者.

我使用一个16字符长的盐作为较大盐的一部分使用SHA256,它在PHP手册中用作示例.

$password = //string entered at login
$salt = '$5$rounds=250000$1234abcd5678defg$';
Run Code Online (Sandbox Code Playgroud)

在我输入密码后输入密码

$hash = crypt($password, $salt);
Run Code Online (Sandbox Code Playgroud)

我得到一个像这样的字符串作为返回值:

$5$rounds=250000$1234abcd5678$tI.Oiz.YwWjIwT3K.SLU8SwUZ9J0/odBCkbE6t0igeB
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是16字符盐,它是较大部分的一部分(上面的1234abcd5678defg),现在被截断为12个字符.

这是按预期的吗?该crypt()函数现在似乎比以前返回不同的结果 - 通常是PHP版本之间的?更改日志中没有任何内容表明加密算法有任何根本性的变化.

php crypt sha256 zend-server-ce

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

SHA256签名

我有一张智能卡,我需要用这个来签名.这是我在stackover中看到的一个大问题.

我不能使用RSACryptoServiceProvider,bkz它不支持RSA-SHA256 alogrithm.

在First,我使用CAPICOM.dll,如下面的代码,

SignedData sed = new SignedData();
sed.Content = "a"; // data to sign
Signer ser = new Signer();
ser.Certificate = cc;
string singnn = sed.Sign(ser, false, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
Run Code Online (Sandbox Code Playgroud)

但是没有公钥来验证我的签名值,我无法从capicom.dll获取验证密钥.

之后 ,

我使用X509Certificate2和RSACryptoServiceProvider,如下面的代码,

        X509Certificate2 certificate = new X509Certificate2();
        // Access Personal (MY) certificate store of current user
        X509Store my = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        my.Open(OpenFlags.ReadOnly);

        // Find the certificate we'll use to sign            
        RSACryptoServiceProvider csp = null;
        foreach (X509Certificate2 cert in my.Certificates)
        {
            if (cert.Subject.Contains(certSubject))
            {
                // We found it. …
Run Code Online (Sandbox Code Playgroud)

sha1 rsa rsacryptoserviceprovider signature sha256

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

如何在Android中使用密钥计算字符串的SHA-256哈希值?

我需要用密钥计算字符串的SHA-256哈希值.我找到了这段代码:

public String computeHash(String input)
    throws NoSuchAlgorithmException, UnsupportedEncodingException
{
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    digest.reset();

    byte[] byteData = digest.digest(input.getBytes("UTF-8"));
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < byteData.length; i++) {
        sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

用于计算没有密钥的散列.如何用密钥计算?我搜索但是我没有在Android中找到任何解决方案.任何的想法 ?

hash android sha256

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

使用mage.exe和Sha256时间戳服务器URL对ClickOnce应用程序进行签名

Iam在尝试使用MAGE.exe和SHA256 RFC 3161时间戳签署clickonce(.application)时出错.

mage.exe -s /path/to/our/.application"-cf certfile -ti [RFC 3161 timestamp]

我收到以下错误:

"内部错误,请稍后再试.参数不正确."

如果我尝试在没有时间戳或SHA1时间戳的情况下进行签名,一切正常.

你能否建议使用SHA256 RFC 3161时间戳的一次应用程序签名点击的正确方法

clickonce sha256 mage rsa-sha256

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

将对象内容作为对象 ID 进行哈希处理:SHA256 的快速替代方案

我正在设计Content-addressable storage,所以我正在寻找一个哈希函数来生成对象标识符。每个对象都应该以这种方式根据其内容获得短 ID:object_id = hash(object_content).

先决条件:

  1. 哈希函数应该很快。
  2. 碰撞概率必须尽可能低。
  3. 最佳 ID 长度是32字节,以便256^32最大程度地寻址对象(但可以放宽此要求)。

考虑到这些要求,我选择了SHA256哈希,但不幸的是,它对于我的目的来说还不够快。最快的实现SHA256,我能到基准是opensslboringssl:我的桌面上,Intel Core I5 6400它大约给了420 MB/s每个核心。其他实现(如crypto/rsaGo)甚至更慢。我想SHA256用其他散列函数替换,它提供与 相同的碰撞保证SHA256,但提供更好的吞吐量(至少600 MB/s每个内核)。

请分享您对解决此问题的可能选项的看法。

另外我想指出的是,硬件更新(例如购买带有AVX512指令集的现代 CPU )是不可能的。重点是找到可以在商品硬件上提供更好性能的哈希函数。

hash identity blob sha256

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

如何使用powershell将sha256哈希输出作为二进制数据而不是十六进制数据?

是否有内置方法可以将 SHA256 生成为给定字符串的二进制数据?基本上,我使用下面的 bash 脚本首先将哈希生成为二进制数据,然后进行 base64 编码。我想要的只是 Powershell 中的确切内容,以便两个输出都相同:

clearString="test"
payloadDigest=`echo -n "$clearString" | openssl dgst -binary -sha256 | openssl base64 `
echo ${payloadDigest}
Run Code Online (Sandbox Code Playgroud)

在 powershell 中,我可以使用以下脚本以十六进制形式获取 SHA256,但随后很难将其作为二进制数据获取:

$ClearString= "test"
$hasher = [System.Security.Cryptography.HashAlgorithm]::Create('sha256')
$hash = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($ClearString))

$hashString = [System.BitConverter]::ToString($hash)
$256String= $hashString.Replace('-', '').ToLower()
$sha256String="(stdin)= "+$256String
$sha256String

Run Code Online (Sandbox Code Playgroud)

然后,我可以使用 [Convert]::ToBase64String($Bytes) 转换为 base64,但在将其传递给 base64 转换之前,如何获得类似于 bash 输出的二进制数据。

bash powershell base64 sha256 payload

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

Node &amp; python 不返回相同的 hash256

我的 NodeJS 和 Python 脚本没有返回相同的哈希值,是什么导致了这个问题?

节点.js

const { createHmac } = require("crypto");
var message = 'v1:1583197109:'
var key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL='
const digest = Buffer.from(key, "base64");
const hash = createHmac("sha256", digest)
  .update(message)
  .digest("hex");

console.log(hash)
> 7655b4f816dc7725fb4507a20f2b97823979ea00b121c84b76924fea167dcaf7
Run Code Online (Sandbox Code Playgroud)

蟒蛇3

message = 'v1:1583197109:'
key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL=' + '=' #add a "=" to avoid incorrect padding
digest = base64.b64decode(key.encode('utf-8'))
hash_ = hmac.new(digest, message.encode('utf-8'), hashlib.sha256)
hash_result = hash_.hexdigest()
print(hash_result)
> c762b612d7c56d3f9c95052181969b42c604c2d41b7ce5fc7f5a06457e312d5b
Run Code Online (Sandbox Code Playgroud)

我想这可能是额外的=以避免不正确的填充,但我的密钥以单个=结尾。

python sha256 hmac node.js

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

将 SHA256 摘要添加到 RPM 包

我想将标头和负载的 SHA256 摘要添加到我的 RPM 包中。

目前,它正在使用 sha1 摘要进行构建。

下面是输出 rpm --checksig --verbose pkg_name.rpm

    Header SHA1 digest: OK
    MD5 digest: OK
Run Code Online (Sandbox Code Playgroud)

环境-RHEL6

这是我到目前为止所尝试的

%_source_filedigest_algorithm 8
%_binary_filedigest_algorithm 8
Run Code Online (Sandbox Code Playgroud)
  • 在pkg.spec文件中添加上述宏,如下所示,该文件将传递给rpmbuild命令
%define _source_filedigest_algorithm 8
%define _binary_filedigest_algorithm 8
Run Code Online (Sandbox Code Playgroud)

但上述解决方案都不适合我,重建后我仍然看到我的包正在使用 sha1 和 md5 作为摘要算法进行构建。

请注意上述每个解决方案的命令输出rpm --showrc | grep "digest_algo"如下

-13: _binary_filedigest_algorithm       8
-13: _source_filedigest_algorithm       8

Run Code Online (Sandbox Code Playgroud)

linux hash sha256 rpmbuild rpm-spec

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