Apa itu sha1 pada mysql

View Discussion

Show

Improve Article

Save Article

  • Read
  • Discuss
  • 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: 
     

    SHA1(string)

    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. 
     

    SELECT  
    SHA1('geeksforgeeks'); 

    Output: 
     

    69c9a5c19c5c27e43cb0efc4c8644ed6d03a110b 

    Example-2: Implementing SHA1() function on a string which has a combination of characters and integers. 
     

    SELECT 
    SHA1('geeksforgeeks123'); 

    Output: 
     

    53ce00666cbef425ab8d06ed652095bea20a1616 

    Example-3: Implementing SHA1() function on a NULL string and returning the length of the string after compression. 
     

    SELECT  
    SHA1(NULL); 

    Output: 
     

    NULL 

    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');
    

    Apa itu sha1 pada mysql


    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.