相关疑难解决方法(0)

如何在JavaScript中将文本转换为二进制代码?

文本到二进制代码

我希望JavaScript将textarea中的文本翻译成二进制代码.

例如,如果用户在TESTtextarea中键入" ",01010100 01000101 01010011 01010100则应返回值" ".

我想避免使用switch语句为每个字符分配二进制代码值(例如case "T": return "01010100)或任何其他类似技术.

这是一个JSFiddle来展示我的意思.这在原生JavaScript中是否可行?

javascript string binary

41
推荐指数
9
解决办法
10万
查看次数

如何使用Crypto Web API获取HMAC

如何使用Crypto Web API(window.crypto)在浏览器中获取HMAC-SHA512(密钥,数据)?

目前我使用的是CryptoJS库,它非常简单:

CryptoJS.HmacSHA512("myawesomedata", "mysecretkey").toString();

结果是91c14b8d3bcd48be0488bfb8d96d52db6e5f07e5fc677ced2c12916dc87580961f422f9543c786eebfb5797bc3febf796b929efac5c83b4ec69228927f21a03a.

我想摆脱额外的依赖,并开始使用Crypto Web API.我怎样才能得到相同的结果?

javascript cryptography window.crypto

9
推荐指数
3
解决办法
1097
查看次数

在Javascript(但不是Node)中,如何分割两个Uint8Arrays?

我正在使用浏览器内的Javascript,而不是NodeJS.我有两个Uint8Arrays ......

var d1 = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255])
var d2 = new Uint8Array([255, 255, 255, 255, 237, 49, 56, 0])
Run Code Online (Sandbox Code Playgroud)

每个元素都有8个元素,整数在0到255之间.每个数组代表一个更大的数字.例如,第一个数组表示正整数

0xffffffff
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将d1除以d2得到结果?我读到Javascript中一个整数的最大值是2 ^ 53,我相信它比我可以拥有的最大数字少.我不关心结果的对象类型是什么,但是Uint8Array很好.

javascript arrays division bigint uint8array

7
推荐指数
1
解决办法
86
查看次数

Web Crypto API 在 AES 解密时抛出“DOMException”

我想执行基本的 AES-CBC 解密。encData我有使用 128 位密钥加密的字符串rawKey,初始化向量defaultIV为零。我只想使用 Web Crypto API,而不使用第三方库。可以做吗?

window.crypto.subtle.decrypt当我在 Chromium 和Firefox中使用 Web Crypto API 时,它会抛出异常:(DOMException没有更多信息) 。OperationError: The operation failed for an operation-specific reason

到底是什么问题呢?

密钥和加密数据没问题,我已经在在线解密中检查过它(使用控制台输出中的十六进制字符串)。


代码:

!async function script() {

// ArrayBuffer to Hex String. https://stackoverflow.com/a/40031979/11468937
function buf2hex(buffer) {
    return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}


const defaultIV = new Uint8Array(16);
const rawKey    = new Uint8Array([42, 40, 254, 9, 99, 201, 174, 52, 226, 21, 90, 155, 81, …
Run Code Online (Sandbox Code Playgroud)

javascript webcrypto-api

6
推荐指数
1
解决办法
4741
查看次数

将大数字从二进制转换为十进制并返回JavaScript

我在JavaScript中有一个非常大的数字表示为二进制:

 var largeNumber = '11010011010110100001010011111010010111011111000010010111000111110011111011111000001100000110000011000001100111010100111010101110100010001011010101110011110000011000001100000110000011001001100000110000011000001100000110000111000011100000110000011000001100000110000011000010101100011001110101101001100110100100000110000011000001100000110001001101011110110010001011010001101011010100011001001110001110010100111011011111010000110001110010101010001111010010000101100001000001100001011000011011111000011110001110111110011111111000100011110110101000101100000110000011000001100000110000011010011101010110101101001111101001010010111101011000011101100110010011001001111101'
Run Code Online (Sandbox Code Playgroud)

当我通过使用parseInt(largeNumber, 10)l 将其转换为十进制时它给了我1.5798770299367407e+199但是当我尝试将其转换回二进制时:

parseInt(`1.5798770299367407e+199`, 2)
Run Code Online (Sandbox Code Playgroud)

当我期望看到我的原始二进制表示时,它返回1(我认为与parseInt舍入值的工作方式有关)largeNumber.你能解释一下这种行为吗?我如何在JavaScript中将其转换回原始状态?

编辑:这个问题是我的实验结果,我正在玩存储和传输大量的布尔数据.它largeNumber是一组[true,true,false,true ...]布尔值的表示,必须在客户端,客户端工作者和服务器之间共享.

javascript

5
推荐指数
4
解决办法
2106
查看次数

AES GCM 在 nodejs 中加密并在浏览器中解密?

我正在尝试在 nodejs 中加密一段字符串,并且需要在前端 javascript 中对其进行解密。在 nodejs 中,我使用了加密库,而在前端使用了网络加密。在前端解密时遇到一些错误。

节点

const crypto = require('crypto');
const iv = crypto.randomBytes(12);
const algorithm = 'aes-256-gcm';
let password = 'passwordpasswordpasswordpassword';
let text = 'Hello World!';
let cipher = crypto.createCipheriv(algorithm, password, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
var tag = cipher.getAuthTag();
let cipherObj = {
    content: encrypted,
    tag: tag,
    iv: iv
}
Run Code Online (Sandbox Code Playgroud)

前端

let cipherObj;  //GET FROM BE
let aesKey = await crypto.subtle.importKey(
  "raw",
  Buffer.from('passwordpasswordpasswordpassword'), //password
  "AES-GCM",
  true,
  ["decrypt"]
);

let decrypted = …
Run Code Online (Sandbox Code Playgroud)

javascript encryption cryptography aes-gcm webcrypto-api

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

为什么 crypto.subtle.digest 返回一个空对象

我有以下简单的代码:

inputBytes = new TextEncoder().encode(inputString)
hashBytes = await window.crypto.subtle.digest("SHA-256", inputBytes)
console.log((typeof hashBytes) + ":  " + JSON.stringify(hashBytes))
Run Code Online (Sandbox Code Playgroud)

为什么结果是空对象?我怎样才能得到真正的结果?

这太奇怪了,非常感谢任何帮助

https://codepen.io/JhonnyJason/pen/QWNOqRJ

hash cryptography webcrypto-api

4
推荐指数
1
解决办法
6743
查看次数