2012-08-09 45 views
10

cách thực hiện điều này trong Javascript hoặc Jquery?Word Array to String

Vui lòng đề xuất theo 2 bước:

1.- Từ mảng thành mảng byte đơn.

2.- Byte Array to String.

Có lẽ điều này có thể giúp:

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

Bạn có ý nghĩa gì với mảng byte? –

+1

Câu hỏi đầu tiên: tại sao bạn cần điều này? Có gần như chắc chắn là một cách tốt hơn để đạt được bất cứ điều gì bạn đang cố gắng để thực hiện. – Blazemonger

+0

@Blazemonger Muốn kiểm tra CryptoJS, nó cung cấp băm/cyphers trong một mảng Word. – jacktrades

Trả lời

18

gì bạn đang cố gắng để đạt được đã được thực hiện trong CryptoJS. Từ số documentation:

Bạn có thể chuyển đổi đối tượng WordArray sang các định dạng khác bằng cách gọi phương thức toString một cách rõ ràng và chuyển bộ mã hóa.

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


Thành thật mà nói tôi không có ý tưởng tại sao bạn muốn thực hiện điều đó cho mình ... Nhưng nếu bạn thực sự cần để làm điều đó "bằng tay" trong 2 bước bạn đã đề cập, bạn có thể thử một cái gì đó như thế này :

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)); 

chức năng wordToByteArray nên làm việc một cách hoàn hảo, nhưng lưu ý rằng byteArrayToString sẽ tạo ra kết quả lạ trong hầu hết mọi trường hợp. Tôi không biết nhiều về mã hóa, nhưng ASCII chỉ sử dụng 7 bit, do đó bạn sẽ không nhận được các ký tự ASCII khi cố gắng mã hóa toàn bộ byte. Vì vậy, tôi đã thêm chức năng escape để ít nhất có thể hiển thị tất cả các ký tự lạ mà bạn có thể nhận được. ;)

Tôi khuyên bạn nên sử dụng các hàm mà CryptoJS đã triển khai hoặc chỉ sử dụng mảng byte (không chuyển đổi chuỗi thành chuỗi) cho phân tích của bạn.