Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk membuat cincang daripada rentetan dalam JavaScript?

Bagaimana untuk membuat cincang daripada rentetan dalam JavaScript?

WBOY
WBOYke hadapan
2023-08-25 15:49:041401semak imbas

如何在 JavaScript 中从字符串创建哈希?

Sebelum kita bermula, mari kita fahami pencincangan dalam JavaScript. Nilai cincang juga merupakan rentetan, tetapi ia disulitkan menggunakan algoritma tertentu. Biasanya, kami menggunakan cincang untuk tujuan keselamatan.

Sebagai contoh, Google menyimpan e-mel dan kata laluan pengguna dalam pangkalan data mereka. Kini, pekerja Google boleh mengakses pangkalan data mereka untuk tujuan pembangunan. Tetapi bolehkah mereka mendapatkan e-mel dan kata laluan pengguna daripada pangkalan data? Tidak, kerana kata laluan disimpan dalam bentuk cincang, dan untuk menyahsulit kata laluan, pekerja memerlukan kunci yang kami gunakan semasa mencipta cincang daripada rentetan kata laluan.

Jadi, dengan cara ini, kita boleh menukar data ke dalam format cincang. Setiap kali kita perlu membandingkan data asal dengan data baharu, kita boleh menggunakan algoritma yang sama untuk menukar data baharu kepada nilai cincang dan membandingkannya dengan nilai cincang data asal. Kami akan belajar cara membuat cincangan daripada rentetan dalam JavaScript.

Buat algoritma untuk menukar rentetan kepada cincang

Dalam kaedah ini, kami akan mencipta fungsi tersuai untuk menjana nilai cincang daripada rentetan. Kami akan mengambil nilai ASCII bagi setiap aksara rentetan, melakukan beberapa operasi seperti pendaraban, penambahan, penolakan, ATAU, dsb. dan menjana cincang daripadanya.

Tatabahasa

Pengguna boleh menjana cincang daripada rentetan dengan mengikut sintaks berikut.

for (let character of str) {
   let charCode = character.charCodeAt(0);
   hashString = hashString << 5 – hashString + charCode;
   hashString |= hashString;
}

Dalam sintaks di atas, rentetan cincang mengandungi nilai cincang akhir rentetan str.

Algoritma

  • Langkah 1 - Mulakan pembolehubah hashString kepada sifar.

  • Langkah 2 - Gunakan gelung for-of untuk mengulangi rentetan.

  • Langkah 3 - Di dalam gelung for-of, dapatkan nilai ASCII bagi setiap aksara.

  • Langkah 4 - Selepas itu, alihkan hashString ke kiri dengan 5, darab dengan 31 dan tolak hashString daripadanya.

  • Langkah 5 - Tambahkan nilai ASCII bagi aksara rentetan pada pembolehubah hashString.

  • Langkah 6 - Lakukan operasi ATAU pada nilai pembolehubah hashString dan dirinya sendiri.

  • Langkah 7 - Setelah semua lelaran gelung for selesai, kita mendapat nilai cincang akhir bagi integer 32-bit.

Contoh 1

Dalam contoh di bawah, kami telah mengambil rentetan yang berbeza untuk menjana cincang mereka. Kami mencipta fungsi convertToHash() yang mengambil rentetan sebagai parameter dan melaksanakan algoritma di atas untuk menukarnya kepada nilai cincang.

Pengguna boleh memerhatikan nilai integer 32-bit yang mewakili nilai cincang dalam output. Tambahan pula, kita boleh melihat bahawa ia sentiasa menjana nilai cincang yang sama untuk rentetan yang sama.

<html>
<body>
   <h2>Creating the <i> custom hash function </i> to convert string to hash</h2>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      function convertToHash(str) {
         if (str == "") return 0;
         let hashString = 0;
         for (let character of str) {
            let charCode = character.charCodeAt(0);
            hashString = hashString << 5 - hashString;
            hashString += charCode;
            hashString |= hashString;
         }
         output.innerHTML += "The original string is " + str + "<br/>";
         output.innerHTML += "The hash string related to original string is " + hashString + "<br/>";
         return hashString;
      }
      convertToHash("Hello Users");
      convertToHash("TutorialsPoint");
   </script>
</body>
</html>

Contoh 2

Dalam contoh di bawah, kami melaksanakan algoritma di atas untuk menukar rentetan kepada cincang, tetapi kami menggunakan kaedah kurangkan dan bukannya gelung for. Kami menggunakan kaedah split() untuk menukar rentetan kepada tatasusunan aksara.

Selepas itu, kami menggunakan kaedah reduce() dan lulus fungsi panggil balik sebagai parameter pertama dan 0 sebagai parameter kedua, mewakili nilai awal pembolehubah cincang. Dalam fungsi panggil balik, kami menjana nilai cincang menggunakan nilai ASCII bagi setiap aksara.

<html>
<body>
   <h2>Using the <i> reduce() method </i> to convert string to hash</h2>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      function hashUsingReduce(string) {
         if (string == "") return 0;
         let charArray = string.split('');
         let hash = charArray.reduce((hash, char) => ((hash << 5 - hash) + char.charCodeAt(0)) | hash, 0);
         output.innerHTML += "The original string is " + string + "<br/>";
         output.innerHTML += "The hash string related to original string is " + hash + "<br/>";
         return hash;
      }
      hashUsingReduce("JavaScript");
      hashUsingReduce("TypeScript");
   </script>
</body>
</html>

Menggunakan pakej NPM crypto-js

Crpyo-js ialah pakej Npm yang mengandungi pelbagai kaedah untuk menjana cincang daripada rentetan. Ia juga mengandungi beberapa algoritma untuk menyahsulit mesej.

Pengguna perlu memasang pakej crypto-js npm ke dalam projek nod mereka menggunakan arahan berikut.

npm i crypto-js

Tatabahasa

Pengguna boleh mengikut sintaks berikut untuk mengimport dan menggunakan pakej crypto-js untuk penyulitan dan penyahsulitan.

var ciphertext = CryptoJS.AES.encrypt('string', 'secret key').toString();

Dalam sintaks di atas, kami menggunakan kaedah encrypt() modul AES bagi pakej cryptoJS.

Parameter

  • String - Ia ialah mesej atau data dalam format rentetan dan digunakan untuk menjana cincang.

  • Kunci rahsia ialah kunci rahsia yang akan digunakan oleh algoritma semasa menjana cincang. Sekompleks pun cincangan, ia akan menghasilkan teks yang disulitkan yang lebih selamat.

Contoh 3

Kami telah mengimport pakej crypto-js dalam fail NodeJs dalam contoh di bawah. Selepas itu, kami mengakses modul AES CryptoJs dan menjana cincang daripada rentetan menggunakan kaedah encrypt().

Pengguna boleh melihat nilai cincang yang dijana menggunakan algoritma AES dalam output.

var CryptoJS = require("crypto-js");
// Encrypt
var encryptedText = CryptoJS.AES.encrypt('Your Welcome!', 'This is my Secret').toString();
console.log("The hash string is " + encryptedText);

Output

"The hash string is U2FsdGVkX19br0LjrHteC9+dlP2PS9dVT03IrTc9zwQ="

Tutorial ini mengajar kita dua cara untuk menjana cincang daripada rentetan atau data. Kaedah pertama adalah mudah dan menyulitkan teks tanpa sebarang kunci. Jadi, kita tidak boleh menggunakannya dalam pembangunan sebenar.

Pakej CryptoJs mengandungi pelbagai modul untuk pelbagai algoritma. Kami boleh menggunakan kaedah penyulitan dengan mana-mana algoritma yang turut menggunakan kunci penyulitan. Oleh itu, walaupun anda tahu algoritma tetapi bukan kuncinya, anda tidak boleh menyahsulit teks sifir.

Atas ialah kandungan terperinci Bagaimana untuk membuat cincang daripada rentetan dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam