- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这样一个用Java写的生成密码的代码
MessageDigest messageDigestPassword = MessageDigest.getInstance("SHA1");
messageDigestPassword .reset();
byte[] password = "password".getBytes();
messageDigestPassword .update(password);
byte[] encryptedPassword = messageDigestPassword .digest();
String date = "2019-10-22T11:33:13.393Z";
byte[] dateBytes = date.getBytes(StandardCharsets.UTF_8);
int offset = 0;
byte[] outputBytes = new byte[dateBytes.length + encryptedPassword .length];
System.arraycopy(dateBytes, 0, outputBytes, offset, dateBytes.length);
offset += dateBytes.length;
System.arraycopy(encryptedPassword , 0, outputBytes, offset, encryptedPassword .length);
MessageDigest finalMessageDigeset = MessageDigest.getInstance("SHA-1");
finalMessageDigeset.reset();
finalMessageDigeset.update(outputBytes);
byte[] finalPasswordBytes= finalMessageDigeset .digest();
String finalBase64Password = new String(Base64.encode(finalPasswordBytes));
我正在尝试将其重写为 JavaScript,以便在 postman 中使用它 - CryptoJS到目前为止我有:
function wordArrayToByteArray(wordArray, length) {
if (wordArray.hasOwnProperty("sigBytes") &&
wordArray.hasOwnProperty("words")) {
length = wordArray.sigBytes;
wordArray = wordArray.words;
}
var result = [],
bytes,
i = 0;
while (length > 0) {
bytes = wordToByteArray(wordArray[i], Math.min(4, length));
length -= bytes.length;
result.push(bytes);
i++;
}
return [].concat.apply([], result);
}
function stringToBytes ( str ) {
var ch, st, re = [];
for (var i = 0; i < str.length; i++ ) {
ch = str.charCodeAt(i); // get char
st = []; // set up "stack"
do {
st.push( ch & 0xFF ); // push byte to stack
ch = ch >> 8; // shift value down by 1 byte
}
while ( ch );
// add stack contents to result
// done because chars have "wrong" endianness
re = re.concat( st.reverse() );
}
// return an array of bytes
return re;
}
var dateFixed = "2019-10-22T11:33:13.393Z";
var fixedDateBytes = stringToBytes(dateFixed);
var sha1Password= CryptoJS.SHA1("password");
console.log("sha1Password",sha1Password.toString(CryptoJS.enc.Hex));
var sha1PasswordBytes= wordArrayToByteArray(sha1Password, 20);
var concatedBytes= fixedDateBytes.concat(sha1PasswordBytes);
var finalShaPassWords= CryptoJS.SHA1(concatedBytes);
console.log("finalShaPassWords",finalShaPassWords.toString(CryptoJS.enc.Hex));
console.log("finalShaPassWords",finalShaPassWords.toString(CryptoJS.enc.Base64));
然而不幸的是,用这两种语言编写的 Base64 表示不匹配。
我检查过日期的字节数是相等的。来自散列密码的字节不是。因此在 JavaScript 中 concat 失败后的散列。
我已经检查了第一个密码散列和生成的字节,它们都是相同的。所以我猜测行 var sha1PasswordBytes= wordArrayToByteArray(sha1Password, 20);
导致行 var finalShaPassWords= CryptoJS.SHA1(concatedBytes);
返回错误值。
谁能告诉我哪里出了问题?也许应该写成不同的?
最佳答案
既然你正在使用 CryptoJS,你也可以使用 CryptoJS encoders和 WordArray#concat
-method ,这大大简化了代码:
var CryptoJS = require("crypto-js");
// Input
var inPwd = "password";
var inDate = "2019-10-22T11:33:13.393Z";
// Processing
var pwdHash = CryptoJS.SHA1(inPwd); // hash and convert to WordArray
var date = CryptoJS.enc.Utf8.parse(inDate); // convert to WordArray
var joinedData = date.clone().concat(pwdHash); // join date and hashed password
var joinedDataHash = CryptoJS.SHA1(joinedData); // hash joined data
var joinedDataHashB64 = CryptoJS.enc.Base64.stringify(joinedDataHash); // convert to Base64 string
// Output
console.log("Result: " + joinedDataHashB64 ); // Output: D235TBTZMfpSyB/CDl5MHAjH5fI=
此代码的输出与 Java 代码的输出相同:D235TBTZMfpSyB/CDl5MHAjH5fI=
关于javascript - 使用 CryptoJS 的 Java SHA-1 到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58521221/
我想在我的 AngularJS 应用程序中使用 CryptoJS,但我收到此错误:找不到变量:CryptoJS。 我将其包含在我的 index.html 中: 并尝试加密一些东西: var encr
这是我的 Anguarjs 代码 $httpProvider.defaults.headers.common['key'] = CryptoJS.AES.encrypt('', '=', {
我正在尝试在 CryptoJS 上解密并在 PyCrypto 上加密。 我看到 this 一个很好的答案,就像魅力一样,唯一的问题是它调整 PyCrypto 以与 CryptoJS 一起工作,我更喜欢
我正在尝试使用 CryptoJS AES,如下所示: var msg = "café"; var key = "something"; var c = CryptoJS.AES.encrypt(msg
我需要解密用 CryptoJS 加密的东西。我有用于加密的函数、加密对象的结构和用于加密的数据,但我需要知道该对象的一些值。 函数是: var c = CryptoJS.enc.Utf8.parse(
我正在使用 CryptoJS 手动解密具有一组提供的值的字符串。提供了 secret ,然后采用 SHA256。消息和初始化向量是 base 64 编码的。这就是我正在尝试的,但每次我运行它时,输出都
我有一个包含 SHA1 散列数据的密码表。所以我想用 CryptoJS 进行验证输入。它出错了..但是当我尝试显示它时,结果匹配..我编写了错误的函数吗? 这是我的代码 function checkC
我想使用类似于 SpeakEasy 的 javascript 创建一个 HOTP 客户端 上面的库是为服务器端 javascript 使用而设计的,它使用了 NodeJS。 我想在浏览器的前端 jav
我正在尝试编写一个应用程序,以在浏览器中使用 JS 对文件进行端到端加密。但是我似乎无法正确解密所有文件。 TL;DR 由于整体加密大于 1MB 的文件是不切实际的,因此我尝试逐 block 加密它们
我想连接到蓝牙设备。通信仅通过十六进制字符串。我需要编码一个 16 字节的值。因此,我还期望有一个 16 字节的值。在我的实现中,CryptoJS 总是返回更长的结果。根据文档,不需要 IV。 (“所
我在使用 CryptoJS 时遇到问题。 我尝试加密字符串,但它给出了不同的输出。 字符串:“测试消息” key :“123456” 这是我尝试运行的测试代码 var encrypted =
我正在尝试使用 CryptoJS 加密 32 个字符的字符串: var string = '12345678901234567890123456789012'. 我使用 AES256 的 32 个字符
我需要解密 JavaScript 中的十六进制消息,其结果与用 Java 编写的代码完全相同。然而,使用 CryptoJs 的 Javascript 版本返回一个空结果 Java中的代码: priva
我无法使用 jQuery 访问 encryptedData 变量,但在 alert 中它可以工作!!! $( document ).ready(function() { var te
我已经为 RSASHA256 编写了 javascript,但出现错误 crypto.js 未定义。 function aaa(message,secret) { ; ;
我正在尝试使用 CryptoJS 的 PBKDF2 和盐散列来存储我的密码。这是我对注册中的用户密码进行哈希处理的部分: var passwordInput = document.getElement
我正在学习各种哈希技术,并发现了有趣的库,从 cryptoJs 开始 在文档中,有多个选项定义如下散列哈马卡PBKDF2密码编码器 我理解散列是关于生成密文。 HMAC 的作用是生成消息验证代码。但我
我已经使用以下库很多年了,现在它不可用了。 http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js 有人可以帮忙寻找替代
我已经使用以下库很多年了,现在它不可用了。 http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js 有人可以帮忙寻找替代
我正在尝试将Node.js脚本 转换为Golang。但是,我在解码Base64时总是收到"error: illegal base64 data at input byte 40"错误。有人可以帮我,已
我是一名优秀的程序员,十分优秀!