2013-08-05 5 views
0

Я планирую использовать шифрование AES на стороне клиента для своего веб-приложения.Кодирование Javascript, разбивающее и комбинируя многобайтовые символы?

Прямо сейчас, я искал способы, чтобы разорвать мультибайтные символов в один байт'non-символов, зашифровать (иметь один и тот же зашифрованный текст длиной),

де-склеп их обратно, конвертировать эти однобайтовые «не-символы» возвращаются к многобайтным символам.

Я видела wiki для UTF-8 (предположительно стандартная кодировка для JS?) И UTF-16, но я не могу понять, как обнаружить «фрагментированные» многобайтовые символы и как я могу их комбинировать назад.

спасибо:)

+1

_I'm использовать на стороне клиента AES шифрование для моего веб-app._ - почему? HTTPS не применим? – Halcyon

+0

Вы уверены, что ваша библиотека AES еще не имеет методов преобразования строк в/из UTF8? Какую библиотеку вы используете? – xanatos

+0

@FritsvanCampen Я делаю здесь какой-то эксперимент - ничего не производят, но что-то вроде демонстрационной страницы – user1894397

ответ

7

JavaScript strings являются UTF-16 хранится в 16-битных "символов". Для символов Unicode («кодовые точки»), которые требуют более 16 бит (некоторые кодовые точки требуют 32 бита в UTF-16), каждый символ «JavaScript» на самом деле является лишь половиной кодовой точки.

Так «перерыв» персонаж JavaScript в байты, вы просто символьный код и отделились старшие байты и младшие байты:

var code = str.charCodeAt(0); // The first character, obviously you'll have a loop 
var lowbyte = code & 0xFF; 
var highbyte = (code & 0xFF00) >> 8; 

(Хотя количество JavaScript в плавающей точке, то побитовые операторы работают в терминах 32-битных целых чисел, и, конечно, в нашем случае применимы только 16 из этих битов.)

У вас никогда не будет нечетного количества байтов, потому что снова это UTF-16.

+0

Вы лучший, TJ ^. ^ – naomik

0

Вы можете просто преобразовать в UTF8 ... Например, используя этот trick

function encode_utf8(s) { 
    return unescape(encodeURIComponent(s)); 
} 

function decode_utf8(s) { 
    return decodeURIComponent(escape(s)); 
} 

Учитывая вы используете crypto-js, вы можете использовать его методы для преобразования в utf8 и вернуться в строку. См here:

var words = CryptoJS.enc.Utf8.parse(''); 
var utf8 = CryptoJS.enc.Utf8.stringify(words); 

, вероятно, является неудачным примером utf8 характера.

Просмотрев другие примеры (см. Пример Latin1), я скажу, что с parse вы преобразовываете строку в Utf8 (технически вы конвертируете ее в Utf8 и помещаете в специальный массив, используемый крипто-js типа WordArray), и результат может быть передан алгоритму кодирования Aes и с stringify вы преобразовываете WordArray (например, полученный алгоритмом декодирования) в Utf8.

JsFiddle Пример: планирование http://jsfiddle.net/UpJRm/

Смежные вопросы