2012-08-09 21 views
10

come fare ciò in Javascript o Jquery?Matrice di parole in stringa

Si prega di suggerire in 2 fasi: Array

1.- Word per array di byte singolo.

2.- Byte Matrice su stringa.

Forse questo può aiutare:

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

Cosa intendi per matrice di byte? –

+1

Prima domanda: perché ne hai bisogno? C'è quasi sicuramente un modo migliore per ottenere qualsiasi cosa tu stia cercando di realizzare. – Blazemonger

+0

@Blazemonger Desidera ispezionare CryptoJS, fornisce hash/cyphers in un array di parole. – jacktrades

risposta

18

Ciò che si sta cercando di raggiungere è già implementata in CryptoJS. Da documentation:

È possibile convertire un oggetto WordArray in altri formati chiamando esplicitamente il metodo toString e passando un encoder.

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


Onestamente non ho idea del perché si desidera implementare che da soli ... Ma se è assolutamente necessario farlo "manualmente" nei 2 passi che hai citato, si potrebbe provare qualcosa di simile :

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 funzione wordToByteArray dovrebbe funzionare perfettamente, ma essere consapevoli che byteArrayToString produrrà risultati strani in quasi ogni caso. Non so molto sulle codifiche, ma ASCII utilizza solo 7 bit, quindi non si otterranno caratteri ASCII quando si tenta di codificare un intero byte. Così ho aggiunto la funzione escape per essere in grado di visualizzare tutti quegli strani caratteri che potresti ottenere. ;)

Si consiglia di utilizzare le funzioni che CryptoJS ha già implementato o utilizzare semplicemente l'array di byte (senza convertirlo in stringa) per l'analisi.

Problemi correlati