我试图充分利用MS CAPI,并且陷入了一个巨大的恶作剧......只有SunMSCapi提供商,嗯,提供,至少在签名方面缺少更好的词,以下算法:
而且我并不急于使用这样的算法GOST3411withECGOST3410,或者RIPEMD128withRSABouncyCastle 使用的算法,但它会很好,并且在这种特殊情况下,如果不是必要的话,至少能够登录SHA256withRSA算法是非常重要的. ..(512等等和ECDSA加密,将是一个很大的优势,但我不指望那么多).
我试图找到一个替代品,但只找到这个包装,看起来很好,但我不得不再挖一点.
有没有人知道另一种方式,包装或提供者访问mscapi(cryptoapi)?
有关:
SunMSCapi doc:http://docs.oracle.com/javase/6/docs/technotes/guides/security/SunProviders.html#SunMSCAPI
请求SHA256withRSA:http:
//bugs.sun.com/view_bug.do?bad_id = 6753664
我正在构建一个自动化流程来生成扩展.是否有直接计算扩展ID的代码示例,并完全绕过与浏览器的交互?
(我在回答我自己的问题,下面.)
如何在 Windows 上使用 Git Bash 终端验证下载文件的 sha256 哈希值?例如PHP 版本。
我正在尝试使用亚马逊支付服务,他们要求我做这样的事情:
这是完整的签名,所以你可以看到我添加了签名方法:
$string_to_sign = "GET\n
authorize.payments-sandbox.amazon.com\n
cobranded-ui/actions/start?
SignatureMethod=HmacSHA256&SignatureVersion=2&callerKey=my_key&callerReference=YourCallerReference&paymentReason=donation&pipelineName=SingleUse&returnUrl=http%3A%2F%2Fyourwebsite.com%2Freturn.html&transactionAmount=4.0";
Run Code Online (Sandbox Code Playgroud)
然后我加密它如下.
$encoded_string_to_sign = URLEncode(Base64_Encode(hash_hmac("sha256", $string_to_sign, 'my_secret_key')));
Run Code Online (Sandbox Code Playgroud)
我这样做,但后来我从他们那里得到一个错误说:
Caller Input Exception: The following input(s) are either invalid or absent:[signatureMethod]
Run Code Online (Sandbox Code Playgroud)
知道这里可能出了什么问题吗?
以下是整个代码:(变量分配上面的值)
<?php
$string_to_sign = 'GET
authorize.payments-sandbox.amazon.com/cobranded-ui/actions/startSignatureMethod=HmacSHA256&SignatureVersion=2&callerKey=AKIAJENBYSJCJX2IDWDQ&callerReference=YourCallerReference&paymentReason=donation&pipelineName=SingleUse&returnUrl=http%3A%2F%2Fproblemio.com&transactionAmount=4.0';
$encoded_string_to_sign = URLEncode(Base64_Encode(hash_hmac("sha256", $string_to_sign, 'my_secret_key')));
$amazon_request_sandbox = 'https://authorize.payments-sandbox.amazon.com/cobranded-ui/actions/start?SignatureVersion=2&returnUrl='.$return_url.'&paymentReason='.$payment_reason.'&callerReference=YourCallerReference&callerKey='.$my_access_key_id.'&transactionAmount=4.0&pipelineName=SingleUse&SignatureMethod=HmacSHA256&Signature='.$encoded_string_to_sign;
//echo $amazon_request_sandbox; - use this if you want to see the resulting request and paste it into the browser
header('Location: '.$amazon_request_sandbox);
?>
Run Code Online (Sandbox Code Playgroud)
谢谢!!
我正在尝试使用 CryptoJS 在 Javascript 中构建一个 HMAC SHA256 字符串,我现有的代码是使用 Akamai 库用 PHP 编写的。
在某些情况下,与 PHP 相比,我得到了不同的结果,我无法理解为什么它会给我不同的结果
/*
<php> Using native hash_hmac
Generating key by concatenating char
*/
$signature1 = hash_hmac('SHA256', "st=1453362060~exp=1453363260~acl=/*", chr(63));
$signature2 = hash_hmac('SHA256', "st=1453362060~exp=1453363260~acl=/*", chr(63) . chr(23));
$signature3 = hash_hmac('SHA256', "st=1453362060~exp=1453363260~acl=/*", chr(63) . chr(23) . chr(253));
/*
here is result from php
signature1 : 3e086bb48ab9aafa85661f9ce1b7dac49befddf117ce2a42d93c92b6abe513ce ( matched: same as JavaScript)
signature2 : 3667dd414a50f68f7ce083e540f27f68f7d0f18617b1fb1e4788bffeaeab59f6( matched: same as JavaScript)
signature3 : dd5a20041661046fdee871c8b9e77b3190fbbf85937c098090a1d524719b6aa9 ( not matched: diff from JavaScript)
*/
/*
<JavaScript> …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些函数或一种使用密钥在 C++ 中返回 HMAC SHA256 哈希的方法。我看过 Crypto++ 和 OpenSSL 的文档,但它不接受用于计算的额外密钥参数。有人可以通过提供一些信息、代码片段或链接来帮助我。
我正在尝试使用 Dropbox 的 API,我让它成功地通过 webhooks 向我发送警报,但现在我想在每次他们向我发送警报时验证签名。
从 dropbox 的文档中,他们写道:
“每个通知请求都将包含一个名为 X-Dropbox-Signature 的标头,其中包含请求正文的 HMAC-SHA256 签名,使用您的应用程序机密作为签名密钥。这可以让您的应用程序验证通知确实来自 Dropbox。”
因此,我成功捕获了该签名,并使用 NodeJS 内置的加密模块尝试使用 HMAC SHA256 创建自己的签名,然后将我的签名与 Dropbox 发送给我的签名进行比较。
这是我这样做的代码:
var sign = req.get("X-Dropbox-Signature");
console.log(sign);
var hmac = crypto.createHmac(algorithm, secret);
hmac.update(JSON.stringify(req.body));
hash = hmac.digest('hex');
console.log(hash);
Run Code Online (Sandbox Code Playgroud)
其中 algorithm 只是“sha256”,secret 是我从 Dropbox 应用程序页面获得的密钥。我必须使用 JSON.stringify(req.body) 因为 req.body 是一个对象,而 hmac.update 需要一个字符串。我想知道这是否是我的错误的来源?
我控制台记录了来自 dropbox 的签名,然后我控制台记录了我使用 hmac 创建的签名,但它是一个不同的签名。
对我可能做错的事情有什么建议吗?
问题:
如何正确生成校验和,这是独立的,一致的,独立于浏览器?另外,我想将SHA256/MD5校验和字符串转换为64位.
如何在没有大量RAM要求的情况下正确读取文件以生成校验和?即我们如何在不影响RAM的情况下处理1 GB文件
例如,是否可以在不将文件加载到内存的情况下读取文件?(见答案)
这个项目似乎很有希望,但也无法实现.
我的目的是在X MB的块中逐步/递增地生成校验和.这可能有助于避免一次使用太多RAM.
以下是代码,它没有按预期工作:
let SIZE_CHECKSUM = 10 * Math.pow(1024, 2); // 10 MB; But can be 1 MB too
async function GetChecksum (file: File):
Promise<string>
{
let hashAlgorithm: CryptoJS.lib.IHasher<Object> = CryptoJS.algo.SHA256.create();
let totalChunks: number = Math.ceil(file.size / SIZE_CHECKSUM);
for (let chunkCount = 0, start = 0, end = 0; chunkCount < totalChunks; ++chunkCount)
{
end = Math.min(start + SIZE_CHECKSUM, file.size);
let resultChunk: string = await (new Response(file.slice(start, end)).text());
hashAlgorithm.update(resultChunk);
start …Run Code Online (Sandbox Code Playgroud) 我希望在 Javascript 中使用 SHA256 在本地散列一个字符串。我一直在环顾四周,认为会有某种官方库或函数,但我发现的只是大量不同的项目,每个项目都有不同的脚本,而且我不太确定要信任的脚本(因为我不是专家,绝对没有资格评估它们)或如何实施它们。 编辑:我需要文本输出,而不是十六进制,对不起,如果我在发布原始问题时没有解释。
这是我迄今为止尝试过的:
async function sha256(message) {
// encode as UTF-8
const msgBuffer = new TextEncoder('utf-8').encode(message);
// hash the message
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
// convert ArrayBuffer to Array
const hashArray = Array.from(new Uint8Array(hashBuffer));
// convert bytes to hex string
const hashHex = hashArray.map(b => ('00' + b.toString(16)).slice(-2)).join('');
console.log(hashHex);
return hashHex;
}
sha256(passwordInput);
Run Code Online (Sandbox Code Playgroud)
未捕获(承诺)类型错误:无法读取未定义的属性“摘要”
我是 javascript 新手,我愿意接受所有建议,所以是的。
尽管您的大部分建议都有效,但对于那些希望使用 Web Crypto API 的人来说,答案就在第 5 行。我需要crypto.subtle.digest改为window.crypto.subtle.digest