L'exemple de cet article décrit comment implémenter l'algorithme de chiffrement SHA-1 en JavaScript. Partagez-le avec tout le monde pour votre référence. La méthode de mise en œuvre spécifique est la suivante :
Appelez simplement la méthode : hex_sha1.
/*
*
* Une implémentation JavaScript de l'algorithme de hachage sécurisé, SHA-1, tel que défini
* dans FIPS PUB 180-1
*
*Par lizq
*
*2006-11-11
*
*/
/*
*
* Variables configurables.
*
*/
var hexadécimal = 0 ; /* format de sortie hexadécimal. 0 - minuscule ; 1 - majuscule */
varchrsz = 8 ; /* bits par caractère d'entrée. 8 - ASCII ; 16 - Unicode */
/*
*
* La fonction principale pour calculer le résumé du message
*
*/
fonction hex_sha1(s){
return binb2hex(core_sha1(AlignSHA1(s)));
>
/*
*
* Effectuez un simple auto-test pour voir si la VM fonctionne
*
*/
fonction sha1_vm_test(){
return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
>
/*
*
* Calculez le SHA-1 d'un tableau de mots big-endian et une longueur en bits
*
*/
fonction core_sha1(blockArray){
var x = blockArray; // ajoute un remplissage
var w = Tableau(80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
pour (var i = 0; i < x.length; i = 16) // 每次处理512位 16*32
{
var vieuxa = a;
var vieuxb = b;
var vieuxc = c;
var vieuxd = d;
var vieux = e;
pour (var j = 0; j < 80; j ) // 对每个512位进行80步操作
{
si (j < 16)
w[j] = x[je j];
d'autre
w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));
e = d;
d = c;
c = rôle(b, 30);
b = une;
une = t;
>
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
e = safe_add(e, ancien);
>
renvoyer un nouveau tableau (a, b, c, d, e);
>
/*
*
* Effectuer la fonction de combinaison de triplet appropriée pour le courant
*itération
*
* 返回对应F函数的值
*
*/
fonction sha1_ft(t, b, c, d){
si (t < 20)
retour (b & c) | ((~ b) & d);
si (t < 40)
retourner b ^ c ^ d;
si (t < 60)
retour (b & c) | (b&d) | (c&d);
retourner b ^ c ^ d; //t<80
>
/*
*
* Déterminer la constante additive appropriée pour l'itération actuelle
*
* 返回对应的Kt值
*
*/
fonction sha1_kt(t){
retour (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514;
>
/*
*
* Ajoutez des nombres entiers, en retournant à 2 ^ 32. Cela utilise des opérations 16 bits en interne
*
* pour contourner les bugs de certains interpréteurs JS.
*
* 将32位数拆成高16位和低16位分别进行相加,从而实现 MOD 2^32 的加法
*
*/
fonction safe_add(x, y){
var lsw = (x & 0xFFFF) (y & 0xFFFF);
var msw = (x >> 16) (y >> 16) (lsw >> 16);
retour (msw << 16) | (lsw & 0xFFFF);
>
/*
*
* Faites pivoter au niveau du bit un nombre de 32 bits vers la gauche.
*
* 32位二进制数循环左移
*
*/
fonction rol(num, cnt){
retour (num << cnt) | (num >>> (32 - cnt));
>
/*
*
* Le SHA1 standard a besoin que la chaîne d'entrée tienne dans un bloc
*
* Cette fonction aligne la chaîne d'entrée pour répondre à l'exigence
*
*/
fonction AlignSHA1(str){
var nblk = ((str.length 8) >> 6) 1, blks = new Array(nblk * 16);
pour (var i = 0; i < nblk * 16; i )
blks[i] = 0;
pour (i = 0; i < str.length; i )
blks[je >> 2] |= str.charCodeAt(i) << (24 - (i & 3) * 8);
blks[je >> 2] |= 0x80 ≪≪ (24 - (i & 3) * 8);
blks[nblk * 16 - 1] = str.length * 8;
retournez les noirs ;
>
/*
*
* Convertissez un tableau de mots big-endian en chaîne hexadécimale.
*
*/
fonction binb2hex(binarray){
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
pour (var i = 0; i < binarray.length * 4; i ) {
str = hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8 4)) & 0xF)
hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF);
>
retourner str;
>
/*
*
* calculer l'accord MessageDigest au message source entré
*
*/
fonction calcDigest(){
var digestM = hex_sha1(document.SHAForm.SourceMessage.value);
document.SHAForm.MessageDigest.value = digestM;
>
希望本文所述对大家的javascript程序设计有所帮助。