Maison > interface Web > js tutoriel > Comment implémenter l'algorithme de chiffrement SHA-1 dans les compétences JavaScript_javascript

Comment implémenter l'algorithme de chiffrement SHA-1 dans les compétences JavaScript_javascript

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2016-05-16 16:10:20
original
1827 Les gens l'ont consulté

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.

Copier le code Le code est le suivant :
/*
 *
 * 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程序设计有所帮助。

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
c++ appelle javascript
Depuis 1970-01-01 08:00:00
0
0
0
Qu’est-ce que le garbage collection JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Que sont les fonctions de hook JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Comment obtenir la date actuelle en JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal