2012-08-09 14 views
10

cómo hacer esto en JavaScript o Jquery?Word Array to String

Para sugerir en 2 pasos:

1.- Palabra de matriz a matriz de un solo byte.

2.- Matriz de bytes a cadena.

Tal vez esto puede ayudar:

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

¿Qué quiere decir con byte array? –

+1

Primera pregunta: ¿por qué necesita esto? Es casi seguro que hay una mejor manera de lograr lo que sea que intentes lograr. – Blazemonger

+0

@Blazemonger Desea inspeccionar CryptoJS, proporciona hashes/cyphers en una matriz de palabras. – jacktrades

Respuesta

18

Lo que estamos tratando de lograr ya se implementa en CryptoJS. Desde documentation:

Puede convertir un objeto WordArray en otros formatos llamando explícitamente al método toString y pasando un codificador.

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


Honestamente no tengo ni idea de por qué se desea implementar que usted mismo ... Pero si es absolutamente necesario para hacerlo "manualmente" en los 2 pasos que usted ha mencionado, podría intentar algo como esto :

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

La función wordToByteArray debería funcionar perfectamente, pero tenga en cuenta que byteArrayToString producirán resultados extraños en casi cualquier caso. No sé mucho sobre codificaciones, pero ASCII solo usa 7 bits, por lo que no obtendrás caracteres ASCII cuando intentes codificar un byte completo. Así que agregué la función escape para al menos poder mostrar todos esos caracteres extraños que podría obtener. ;)

Te recomiendo que uses las funciones que CryptoJS ya ha implementado o simplemente utilizas la matriz de bytes (sin convertirla en cadena) para tu análisis.