Преобразование JavaScript между ArrayBuffer и строкой китайских / японских символов - PullRequest
0 голосов
/ 03 июля 2018

Я использую Web Crypto API . Я получаю из шифрования / дешифрования ArrayBuffer.

для хранения ArrayBuffer, мне нужно его преобразовать в строку. я нашел этот пример для этой работы:

function ab2str(buf) {
  return String.fromCharCode.apply(null, new Uint16Array(buf));
}
function str2ab(str) {
  var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
  var bufView = new Uint16Array(buf);
  for (var i=0, strLen=str.length; i < strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

но я получаю не оригинальную строку. абстрактный пример рабочего процесса:

var encryptedArrayBuffer = webcryapto.encrypt("someLongString");
var encryptedString = ab2str(encryptedArrayBuffer);

теперь я получаю строку с китайскими или японскими символами.

var decryptedArrayBuffer = webcryapto.decrypt(someKey);
var decryptedString = ab2str(encryptedString);

после преобразования расшифрованная строка не похожа на оригинальную. в моем массиве данных некоторые значения расшифрованы правильно. в остальных включены китайские / японские символы, такие как зашифрованное значение.

Есть ли хорошее решение, чтобы получить неожиданные символы?

UPDATE

Я использую "AES-CBC" из приведенных выше примеров веб-шифрования.

рабочее значение

plain = "{"Key":"Outbuildings#58dc9e89-cbf6-4b06-ae9d-3380803ae995","Value":"Sonstiges Nebengebäude"}"

encryptedAB = webcrypto.encrypt(plain)

encrypted = ab2str(encryptedAB)

encrypted => "鷨捍⩆ኅ읲☹많ᦞ㙝⵱芾⟷㾌㴵꾂큹锩凉㚣䬶⁐薈Ⴞ舢ử揼߱泏넸붛?蚔缍꠿䌩?턂煮铈氁覞⺛鱂髽ؠ읰픡忧?㣑鎜ㆅ鍏ᾪ莍庉떹Ẋ昭婚篥.矧ㇴ⒕ࡹ텾᧫ᲈﺍ⮣䋅"

decryptedArrayBuffer = webcrypto.decrypt(encrypted) 

decrypted = ab2str(decryptedArrayBuffer)

decrypted = > "{"Key":"Outbuildings#58dc9e89-cbf6-4b06-ae9d-3380803ae995","Value":"Sonstiges Nebengebäude"}"

после расшифровки я получаю свою равнину.

не рабочее значение

plainString = "{"Key": "Outbuildings#d24857bc-5dee-4236-835d-8e3b91567a91", "Value": "Werkstatt"}"

encryptedArrayBuffer = webcrypto.encrypt(plainString)

encrypted => ab2str(encryptedArrayBuffer )

encrypted = "鷨捍⩆ኅ읲☹많ᦞ㙝⵱芾⟷㾌㴵꾂큹곙㤴njǃ⻲︽㙙郬쵸납餵逳䣊ᯗ퇟姛쏱阵巍旿柀⤏뙡뷇劺泴姲娯趱ៜ쪉轮댼롲ᾕ鱁ᬩ㩋䄅ᖯ苊脭䚛뮖ꡞಅ₨ፂ쑱眈盼갚⊙媌콠ᕥ䲵뺜঳왶輄繆緸䜁ꓳ镉⎇繆催ᥤ՘ⴸ㗻"

decryptedAB = webcrypto.decrypt(encrypted)

decrypted = ab2st(decryptedAB)

decrypted => "{"Key":"Outbuildings#d24∲姅�㉍猨씁�熢ᅍ攄稲짷业鯌㰸35d-иe3ꑢ專䫚︙绬ோᲬ㎂1","V偡lue":"Werkstatt"}"

в этом примере GUID и слово «Значение» уничтожаются после ab2str (decryptedArrayBuffer). но это не на всех значениях одинаковых поврежденных символов. одна часть значений в порядке, остальные уничтожены разными символами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...