Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 表情符号和字符,如дей;在UInt8转换时被破坏_Javascript_Encoding_Typescript_Webcrypto Api - Fatal编程技术网

Javascript 表情符号和字符,如дей;在UInt8转换时被破坏

Javascript 表情符号和字符,如дей;在UInt8转换时被破坏,javascript,encoding,typescript,webcrypto-api,Javascript,Encoding,Typescript,Webcrypto Api,我的问题是,我得到的JS对象的字段如下。。。标题:“цццццццццццццц”有効なដែលមាន... 或者,例如,包含此emote的以下脚本对数据加密和解密 “严格使用”; var dataToEncrypt=“аа…”。。。希望它的意思是“天”:“; var iv=window.crypto.getRandomValues(新的Uint8Array(16)); var算法={ 名称:“AES-CBC”, 四:四 }; window.crypto.minute.generateKey( {

我的问题是,我得到的JS对象的字段如下。。。标题:“цццццццццццццц”有効なដែលមាន... 或者,例如,包含此emote的以下脚本对
数据加密和解密

“严格使用”;
var dataToEncrypt=“аа…”。。。希望它的意思是“天”:“;
var iv=window.crypto.getRandomValues(新的Uint8Array(16));
var算法={
名称:“AES-CBC”,
四:四
};
window.crypto.minute.generateKey(
{
名称:“AES-CBC”,
长度:128
},
/*可提取*/true,
/*密钥用法*/['encrypt','decrypt']
).
然后(功能(aesKey){
var uint16array=新的文本编码器('utf-16')。编码(数据加密);
加密(算法,aesKey,UINT16数组)
.then(函数(encryptedArrayBuffer){
log(“加密的”,ab2hextr(encryptedArrayBuffer));
window.crypto.division.decrypt(算法、aesKey、encryptedArrayBuffer)
.然后(函数(结果){
console.log(“解密”,新的文本解码器('utf-16')。解码(结果));
})
.catch(函数(err){
log(“解密失败”,错误);
});
})
.catch(函数(err){
log(“加密失败”,错误);
});
}
).
捕获(函数(错误){
log(“generateKey-failed.”,err);
});
函数ab2hexstr(buf){
var byteArray=新的UINT8阵列(buf);
var-hexString=“”;
var-nextHexByte;
对于(变量i=0;i
这些脚本基于

注意:

我没有使用TypeScript,但您可以根据需要添加类型

资源:


您的表情符号是不适合8位的字符代码。
"use strict";

var dataToEncrypt = "дей ... hopefully, it means 'day' :)";
var iv = window.crypto.getRandomValues(new Uint8Array(16));
var algorithm = {
    name: "AES-CBC",
    iv: iv
};

window.crypto.subtle.generateKey(
    {
        name: "AES-CBC",
        length: 128
    },
    /* extractable */ true,
    /*keyUsages */ ['encrypt', 'decrypt']
).
then(function (aesKey) {
        var uint16array = new TextEncoder('utf-16').encode(dataToEncrypt);

        window.crypto.subtle.encrypt(algorithm, aesKey, uint16array)
            .then(function (encryptedArrayBuffer) {

                console.log("encrypted", ab2hexstr(encryptedArrayBuffer));

                window.crypto.subtle.decrypt(algorithm, aesKey, encryptedArrayBuffer)
                    .then(function (result) {
                        console.log("decrypted", new TextDecoder('utf-16').decode(result));
                    })
                    .catch(function (err) {
                        console.log("Decryption failed.", err);
                    });
            })
            .catch(function (err) {
                console.log("Encryption failed.", err);
            });
    }
).
catch(function (err) {
    console.log("generateKey - failed.", err);
});

function ab2hexstr(buf) {
    var byteArray = new Uint8Array(buf);
    var hexString = "";
    var nextHexByte;

    for (var i = 0; i < byteArray.byteLength; i++) {
        nextHexByte = byteArray[i].toString(16);  // Integer to base 16
        if (nextHexByte.length < 2) {
            nextHexByte = "0" + nextHexByte;     // Otherwise 10 becomes just a instead of 0a
        }
        hexString += nextHexByte;
    }
    return hexString;
}