gpt4 book ai didi

javascript - 切换到不同的加密库

转载 作者:行者123 更新时间:2023-12-01 01:13:33 28 4
gpt4 key购买 nike

有一段代码在项目中使用 CryptoJS 作为 npm 依赖项,但我的安全团队要求我将库切换到 msrcrypto 之类的东西。

  // let secret = CryptoJS.enc.Base64.parse("storageaccountaccesskeyfromAzureViaEnvironmentVariable");
// let hash = CryptoJS.HmacSHA256(strToSign, secret);
// let hashInBase64 = CryptoJS.enc.Base64.stringify(hash);

目标是构建身份验证 header ,如下所述:https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key 。到目前为止,CryptoJS 方法对我来说很有效。

有人可以帮忙吗?我尝试使用在 HTML 中看到的示例,但我不明白 HMAC 示例中的许多单词。我通过 Microsoft 身份验证 header 的在线教程了解到这一点,但我个人并不太了解其中的内容。

我 try catch 这 3 个步骤的一些示例输出,看看是否可以使用 NodeJS 的 Buffer.from 生成相同的输出以进出 Base64,但我还没有看到与我相同的输出参见 CryptoJS。

最佳答案

下面是计算 HMACSHA256(secret: [1, 2, 3, 4, 5, 6], message: [7, 8, 9, 10]) 的示例。两个库产生相同的结果:

const secret = [1, 2, 3, 4, 5, 6];
const data = [7, 8, 9, 10];

// msrcrypto
const algorithm = {
name: 'HMAC',
hash: {
name: 'SHA-256'
}
};
const jwkKey = {
kty: "oct",
alg: "HS256",
k: msrCrypto.toBase64(secret),
ext: true
};
// I don't know why, but with async mode I am getting an error in my browser
// with no meaningful message
msrCrypto.subtle.forceSync = 1;
msrCrypto.subtle.importKey("jwk", jwkKey, algorithm, true, ['sign', 'verify']).then(key => {
msrCrypto.subtle.sign(algorithm, key, data).then(hmac => {
const arr = new Uint8Array(hmac);
console.log('msrCrypto: ' + msrCrypto.toBase64(arr));
});
});

// cryptojs
const cryptoJsSecret = new CryptoJS.lib.WordArray.init(new Uint8Array(secret));
const cryptoJsData = new CryptoJS.lib.WordArray.init(new Uint8Array(data));
const hash = CryptoJS.HmacSHA256(cryptoJsData, cryptoJsSecret);
console.log('CryptoJS: ' + CryptoJS.enc.Base64.stringify(hash));
<script src="https://cdn.jsdelivr.net/npm/msrcrypto@1.5.3/msrcrypto.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>

关于javascript - 切换到不同的加密库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com