View Discussion
Improve Article
Save Article
View Discussion
Improve Article
Save Article
The MySQL SHA1() function is used for encrypting a string using the SHA-1 technique. The SHA1 stands for secure hash algorithm and it produces a 160-bit checksum for a user inputted string.
The MySQL SHA1() function returns NULL if the string passed as an argument is a NULL string. The SHA1() function accepts one parameter which is the string to be encrypted.
Syntax:
Parameters Used:
string – It is used to specify the plain text string that is to be encrypted.
Return Value:
The SHA1() function in MySQL returns the encrypted string or NULL if the string passed is an empty string.
Supported Versions of MySQL:
- MySQL 5.7
- MySQL 5.6
- MySQL 5.5
- MySQL 5.1
- MySQL 5.0
- MySQL 4.1
Example-1: Implementing SHA1() function on a
string.
Output:
Example-2: Implementing SHA1() function on a string which has a combination of characters and integers.
Output:
Example-3: Implementing SHA1() function on a NULL string and returning the length of the string after compression.
Output:
Fungsi SHA1 menggunakan fungsi hash kriptografi SHA1 untuk mengubah string variabel-panjang menjadi string 40-karakter yang merupakan representasi teks dari nilai heksadesimal dari checksum 160-bit.
Sintaksis
SHA1 adalah sinonim dariFungsi SHAdanFungsi FUNC_SHA1.
SHA1(string)Pendapat
Jenis pengembalian
Fungsi SHA1 mengembalikan string 40-karakter yang merupakan representasi teks dari nilai heksadesimal dari checksum 160-bit.
Contoh
Contoh berikut mengembalikan nilai 160-bit untuk kata 'Amazon Redshift':
select sha1('Amazon Redshift');Saya punya pertanyaan sederhana yang muncul ketika saya ingin menyimpan hasil hash SHA1 dalam database MySQL: Berapa lama bidang VARCHAR berada di tempat saya menyimpan hasil hash?
Jawaban:
Saya akan menggunakan VARCHARuntuk data panjang variabel, tetapi tidak dengan data panjang tetap. Karena nilai SHA-1 selalu panjang 160 bit, VARCHARhanya akan membuang byte tambahan untuk panjang bidang panjang tetap .
Dan saya juga tidak akan menyimpan nilai yang SHA1dikembalikan. Karena hanya menggunakan 4 bit per karakter dan dengan demikian akan membutuhkan 160/4 = 40 karakter. Tetapi jika Anda menggunakan 8 bit per karakter, Anda hanya perlu bidang 160/8 = 20 karakter.
Jadi saya sarankan Anda untuk menggunakan BINARY(20)dan UNHEXfungsinya untuk mengubah SHA1nilai menjadi biner.
Saya membandingkan persyaratan penyimpanan untuk BINARY(20)dan CHAR(40).
CREATE TABLE `binary` ( `id` int unsigned auto_increment primary key, `password` binary(20) not null ); CREATE TABLE `char` ( `id` int unsigned auto_increment primary key, `password` char(40) not null );Dengan jutaan catatan, binary(20)dibutuhkan 44,56 juta, sementara char(40)64,57 juta. InnoDBmesin.
Panjang hash SHA1 adalah 40 karakter!
Referensi diambil dari blog ini:
Di bawah ini adalah daftar algoritma hashing beserta ukuran bit yang dibutuhkan:
- MD5 = 128-bit nilai hash.
- SHA1 = nilai hash 160-bit.
- SHA224 = nilai hash 224-bit.
- SHA256 = Nilai hash 256-bit.
- SHA384 = Nilai hash 384-bit.
- SHA512 = nilai hash 512-bit.
Dibuat satu tabel sampel dengan membutuhkan CHAR (n):
CREATE TABLE tbl_PasswordDataType ( ID INTEGER ,MD5_128_bit CHAR(32) ,SHA_160_bit CHAR(40) ,SHA_224_bit CHAR(56) ,SHA_256_bit CHAR(64) ,SHA_384_bit CHAR(96) ,SHA_512_bit CHAR(128) ); INSERT INTO tbl_PasswordDataType VALUES ( 1 ,MD5('SamplePass_WithAddedSalt') ,SHA1('SamplePass_WithAddedSalt') ,SHA2('SamplePass_WithAddedSalt',224) ,SHA2('SamplePass_WithAddedSalt',256) ,SHA2('SamplePass_WithAddedSalt',384) ,SHA2('SamplePass_WithAddedSalt',512) );Ukuran output dari sha1 adalah 160 bit. Yaitu 160/8 == 20 karakter (jika Anda menggunakan karakter 8-bit) atau 160/16 = 10 (jika Anda menggunakan karakter 16-bit).
Jadi panjangnya antara 10 karakter 16-bit, dan 40 digit hex.
Dalam kasus apa pun, tentukan format yang akan Anda simpan, dan jadikan bidang itu ukuran tetap berdasarkan format itu. Dengan begitu Anda tidak akan memiliki ruang kosong.
Anda mungkin masih ingin menggunakan VARCHAR dalam kasus di mana Anda tidak selalu menyimpan hash untuk pengguna (yaitu mengautentikasi akun / lupa url login). Setelah pengguna mengautentikasi / mengubah info masuk mereka, mereka seharusnya tidak dapat menggunakan hash dan seharusnya tidak punya alasan untuk itu. Anda dapat membuat tabel terpisah untuk menyimpan hash -> asosiasi pengguna sementara yang dapat dihapus tapi saya rasa kebanyakan orang tidak repot-repot melakukan ini.
Jika Anda memerlukan indeks pada kolom sha1, saya sarankan CHAR (40) karena alasan kinerja. Dalam kasus saya, kolom sha1 adalah token konfirmasi email, jadi pada halaman landing kueri hanya masuk dengan token. Dalam hal ini CHAR (40) dengan INDEX, menurut pendapat saya, adalah pilihan terbaik :)
Jika Anda ingin mengadopsi metode ini, jangan lupa untuk meninggalkan $ raw_output = false.