小提琴here:
var canonicalString = 'GET'+'\n'
+'/?a=&b=c'+'\n'
+'application/json'+'\n'
+'\n'
+'Mon, 26 Mar 2007 19:37:58 +0000';
console.log(canonicalString);
canonicalString = CryptoJS.HmacSHA256(canonicalString, 'bar');
console.log(CryptoJS.enc.Base64.stringify(canonicalString));
console.log(btoa(canonicalString.toString()));
我无法理解为什么结果会有所不同。哪里我错了?顺便说一句,正确的应该是btoa()
版本。
答案 0 :(得分:0)
使用Base64 online decoder我们可以看到输入采用不同的编码:
7Sbw7FL9uyWDsrrW+Hi9sjdWoOtHT52Fqp9gfViFW1E= ED26F0EC52FDBB2583B2BAD6F878BDB23756A0EB474F9D85AA9F607D58855B51 ZWQyNmYwZWM1MmZkYmIyNTgzYjJiYWQ2Zjg3OGJkYjIzNzU2YTBlYjQ3NGY5ZDg1YWE5ZjYwN2Q1ODg1NWI1MQ== 65643236663065633532666462623235383362326261643666383738626462323337353661306562343734663964383561613966363037643538383535623531
在第一种情况下,最初的原始字符是“E”
在第二种情况下,最初的原始字符是“65”
ASCII字符“E”以十六进制编码为“65”。
这第一种情况编码了一个字符表示,而decomnd情况编码了一个十六进制表示。不同的Base64实现以不同方式处理输入编码。
问题中缺少的是代码示例,需要有Minimal, Complete, and Verifiable example。