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.
Cosa intendi per matrice di byte? –
Prima domanda: perché ne hai bisogno? C'è quasi sicuramente un modo migliore per ottenere qualsiasi cosa tu stia cercando di realizzare. – Blazemonger
@Blazemonger Desidera ispezionare CryptoJS, fornisce hash/cyphers in un array di parole. – jacktrades