2012-08-09 3 views
10

Javascript 또는 Jquery에서이 작업을 수행하는 방법은 무엇입니까?Word 배열을 문자열로

두 단계로 제안하십시오.

1. 단어 배열을 단일 바이트 배열로 지정하십시오.

2. 바이트 배열을 문자열로.

아마이 도움이 될 수 있습니다 : 당신이 달성하려고하는 무엇

function hex2a(hex) { 
    var str = ''; 
    for (var i = 0; i < hex.length; i += 2) 
     str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); 
    return str; 
} 
+0

바이트 배열이란 무엇입니까? –

+1

첫 번째 질문 : 왜 이것을 필요로합니까? 달성하려는 목표를 성취 할 수있는 좋은 방법이 거의 확실합니다. – Blazemonger

+0

@Blazemonger CryptoJS를 검사하기 위해 Word 배열에 해시/사이퍼를 제공합니다. – jacktrades

답변

18

이미 CryptoJS에서 구현됩니다. :

명시 적으로 toString 메서드를 호출하고 인코더를 전달하면 WordArray 개체를 다른 형식으로 변환 할 수 있습니다. 솔직히

var hash = CryptoJS.SHA256("Message"); 
alert(hash.toString(CryptoJS.enc.Base64)); 
alert(hash.toString(CryptoJS.enc.Hex)); 


당신이 자신을 구현하려는 이유는 나도 몰라 ...하지만 당신이 절대적으로 당신이 언급 한 2 단계에서 "수동으로"그것을 할 필요가 있다면, 당신은 이런 식으로 뭔가를 시도 할 수 :

function wordToByteArray(wordArray) { 
    var byteArray = [], word, i, j; 
    for (i = 0; i < wordArray.length; ++i) { 
     word = wordArray[i]; 
     for (j = 3; j >= 0; --j) { 
      byteArray.push((word >> 8 * j) & 0xFF); 
     } 
    } 
    return byteArray; 
} 

function byteArrayToString(byteArray) { 
    var str = "", i; 
    for (i = 0; i < byteArray.length; ++i) { 
     str += escape(String.fromCharCode(byteArray[i])); 
    } 
    return str; 
} 

var hash = CryptoJS.SHA256("Message"); 
var byteArray = wordToByteArray(hash.words); 
alert(byteArrayToString(byteArray)); 

wordToByteArray 기능이 완벽하게 작동하지만, byteArrayToString 거의 모든 경우에 이상한 결과를 얻을 수 있음을 알고 있어야합니다. 인코딩에 대해서는 많이 알지 못하지만 ASCII는 7 비트 만 사용하므로 전체 바이트를 인코딩 할 때 ASCII 문자를 얻지는 못합니다. 그래서 escape 함수를 추가하여 적어도 이상한 문자를 모두 표시 할 수있게했습니다. ;)

CryptoJS가 이미 구현 한 기능을 사용하거나 바이트 배열을 문자열로 변환하지 않고 분석에 사용하는 것이 좋습니다.

관련 문제