Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dekripsi MySql WorkBench AES 256

Sebenarnya tidak ada yang salah dengan kueri pertama Anda, secara sintaksis itu tepat seperti yang ditunjukkan oleh contoh yang berhasil ini.

mysql> SET @@SESSION.block_encryption_mode = 'aes-256-cbc';

mysql> create table MyTable(
    ->  Encrypted_ID varbinary(256),
    ->  InitializationVector_iv varbinary(16)
    -> );
Query OK, 0 rows affected (0.93 sec)

mysql> SET @iv = RANDOM_BYTES(16);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO MyTable SET Encrypted_ID = AES_ENCRYPT('hello','key', @iv), InitializationVector_iv = @iv;
Query OK, 1 row affected (0.17 sec)

mysql> SELECT CAST(AES_DECRYPT(Encrypted_ID,'key', InitializationVector_iv) AS CHAR) from MyTable;
+------------------------------------------------------------------------+
| CAST(AES_DECRYPT(Encrypted_ID,'key', InitializationVector_iv) AS CHAR) |
+------------------------------------------------------------------------+
| hello                                                                  |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

Adapun mengapa itu tidak berfungsi, saya berhasil mendapatkan kueri untuk mengembalikan NULL dalam 2 skenario. Satu, Anda mendapatkan NULL kembali jika Anda menggunakan iv yang berbeda untuk enkripsi dan dekripsi, jadi Anda mungkin ingin melihat bagaimana Anda menyimpan sebagai iv. Dua, Anda mendapatkan NULL di mana Anda memiliki variabel block_encryption_mode yang disetel secara berbeda saat menyimpan dan mencoba mengambil nilainya, periksa apakah Anda tidak secara tidak sengaja kembali ke default 'aes-128-ebc di antara sesi. Mungkin ada yang lain...

Kueri kedua akan gagal karena Anda perlu menyediakan iv untuk fungsi enkripsi dan dekripsi, Anda hanya menggunakannya untuk mengenkripsi. Selain itu, karena Anda mengambil nilai dari MyTable, Encrypted_ID sudah akan dienkripsi dan efek dari kueri ini adalah mengenkripsinya lagi, sebelum membalikkannya agar Anda kembali ke nilai yang disimpan (terenkripsi).

Terakhir, AES hanya akan menggunakan 16 byte dari iv sehingga Anda mungkin juga membuat VARBINARY (16).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OpenCart:Cara mengisi oc_category_path secara akurat

  2. Ambil 2 posting terakhir untuk setiap kategori

  3. Perbarui satu tabel MySQL dengan nilai dari yang lain

  4. Apa perbedaan antara utf8_unicode_ci dan utf8_unicode_520_ci

  5. Mengubah judul kolom SQL melalui kueri