Làm thế nào để mã hóa mật khẩu bằng cách sử dụng 'EncryptByPassPhrase'?

Mặc dù việc lưu trữ mật khẩu trong cơ sở dữ liệu có thể là một phương pháp phổ biến, nhưng việc lưu trữ chúng một cách chính xác thường không phổ biến. Bạn có ba lựa chọn về cách thực hiện khi lưu mật khẩu trong cơ sở dữ liệu. Bạn có thể lưu mật khẩu của mình dưới dạng:

Thông thường, chúng ta cần giải mã các giá trị đã mã hóa của mình vì nhiều lý do khác nhau. Vì vậy, tùy chọn 2 “Văn bản được mã hóa có thể được giải mã” thường được theo sau cho mục đích này.

Trong bài viết này, chúng tôi sẽ thảo luận về cách Được mã hóagiải mã văn bản, những lỗi nào phát sinh trong khi làm như vậy và đâu là cách được khuyến nghị để làm theo.

Văn bản được mã hóa có thể được giải mã:

Mọi người đều hiểu mật khẩu là gì, ngày càng ít cá nhân quen thuộc với mật khẩu. Cụm mật khẩu tương đối an toàn hơn. “Entropy” là một khái niệm trong lý thuyết công nghệ thông tin dùng để chỉ mức độ ngẫu nhiên của một mật khẩu. Thông thường, mật khẩu càng chứa nhiều ngẫu nhiên thì tin tặc càng khó phá mật khẩu. Đó là lý do tại sao mật khẩu dài hơn được ưa thích hơn vì chúng có thể nhiều hơn “ngẫu nhiên“. Bằng cách thêm các từ vào mật khẩu, entropy có thể được tăng lên. Trong SQL Server 2008 trở lên “ENCRYPTBYPASSPHRASE” chức năng hỗ trợ mã hóa cụm mật khẩu nơi bạn có thể sử dụng các cụm từ như "Tôi rất thích ăn kem" là mật khẩu của bạn hơn là mật khẩu không hỗ trợ dấu cách. Hơn nữa, nó có thể mã hóa mật khẩu an toàn hơn của bạn.

Các “ENCRYPTBYPASSPHRASE” hàm cho phép chúng tôi mã hóa bất kỳ chuỗi nào hoặc VARBINARY giá trị lên đến 7975 byte. Nó cần hai tham số, @passphrase, và @cleartextvà trả về một giá trị chứa các giá trị được mã hóa của kiểu VARBINARY (8000).

Mã hóa thông tin cụm mật khẩu bằng cách sử dụngĐộ dài bit 128 phím TRIPLE DES thuật toán. Cụm mật khẩu là mật khẩu bao gồm dấu cách. Lợi ích của việc sử dụng cụm mật khẩu là việc ghi nhớ một câu hoặc cụm từ quan trọng sẽ đơn giản hơn so với việc ghi nhớ một chuỗi ký tự tương đối dài.

ENCRYPTBYPASSPHRASE:

“ENCRYPTBYPASSPHRASE” cung cấp một cách nhanh chóng và dễ dàng để mã hóa các cột dữ liệu của SQL Server. Chức năng này có sẵn trong SQL Server 2008 trở lên.

Cú pháp:

EncryptByPassPhrase (@passphrase, @cleartext)

Tranh luận:

@passphrase:

Một khóa không đối xứng được tạo từ một cụm mật khẩu. Đây có thể là varchar, char, varchar, binary, VARBINARY, hoặc là NCHAR loại biến có chứa cụm mật khẩu để tạo ra khóa đối xứng. Bất kỳ kiểu dữ liệu nào khác, chẳng hạn như DATE, trước tiên bạn phải chuyển đổi rõ ràng thành giá trị nhị phân để mã hóa ngày sinh.

@cleartext:

An NVARCHAR, char, varchar, nhị phân, VARBINARY, hoặc là NCHAR biến kiểu có chứa văn bản thuần túy. Các tối đa kích thước là tám nghìn byte.

Các loại trả lại:

VARBINARY với 8,000 byte Kích thước tối đa.

Thực hiện:

TẠO BẢNG dbo.encrypted_data ([Id] INT IDENTITY (1,1) PRIMARY KEY, [password] VARBINARY (8000));

Giá trị id sẽ không được mã hóa, trong khi cột mật khẩu thuộc loại VARBINARY (8000), phù hợp với kiểu trả về của ENCRYPTBYPASSPHRASE chức năng.

CHÈN VÀO Dbo.encrypted_data ([mật khẩu]) GIÁ TRỊ (ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Đây là số thẻ tín dụng của tôi!'));

Người ta thấy rằng tham số đầu tiên là cụm mật khẩu cung cấp một khóa đối xứng. Trong khi cái thứ hai là giá trị văn bản cần được mã hóa.

chọn * từ dữ liệu được mã hóa

Tập hợp kết quả sẽ như thế nào.

Câu lệnh SELECT đó trả về giá trị làVARBINARYnhu la:

“0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”

Điều quan trọng cần lưu ý là VARBINARY giá trị trả về từ ENCRYPTBYPASSPHRASEkhông xác định. Điều này có nghĩa là nó sẽ không tạo ra cùng một kết quả mọi lúc ngay cả với cùng một đầu vào. Vì vậy, cùng một câu lệnh SELECT nếu chúng ta chạy chúng hai lần, chúng ta có thể nhận được hai đầu ra khác nhau.

SELECT ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Đây là số thẻ tín dụng của tôi!'); SELECT ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Đây là số thẻ tín dụng của tôi!'); SELECT ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Đây là số thẻ tín dụng của tôi!');

Câu lệnh select sẽ đưa ra như sau:

“0x010000002D69EDEEA6B486FAF38FB353CF2682EE30B450488109BD0E23B88E03CD48F72673C6A462B210D6CE38E00E9F8BA18AB7” cho câu lệnh lựa chọn đầu tiên.

“0x010000007C5736E4B0F15D971D771D2D146924F741D2DB04477C882A6BAF65703F01D950B1AD01E7E4E27E89243F6A4F549170E2” cho câu lệnh thứ hai.

“0x010000009B49BEBAB4B5E510C0C2998604A005617398631C2EBFB0E3C08DDF27C2A06F447FC11BD10B416C7E58038109EBD52021” cho tuyên bố thứ ba.

DECRYPTBYPASSPHRASE:

Chúng tôi cần có thể giải mã nó ngay bây giờ vì mật khẩu của chúng tôi đã được mã hóa. Điều này được thực hiện dễ dàng bằng cách sử dụng tính năng DECRYPTBYPASSPHRASE với cùng một cụm mật khẩu mà chúng tôi đã mã hóa mật khẩu của mình.

Thực thi đoạn mã sau. Và bạn sẽ nhận được mật khẩu với một số ký tự chữ và số dài như một đầu ra như thế này.

“0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”

chọn id, DECRYPTBYPASSPHRASE ('SQL SERVER 2017', mật khẩu) làm mật khẩu từ mã hóa_data

Đó không phải là mật khẩu. Giống ENCRYPTBYPASSPHRASE, DECRYPTBYPASSPHRASE trả về một VARBINARY giá trị được mã hóa thành một chuỗi chức năng. Bằng cách thêm một hàm CHUYỂN ĐỔI hoặc ép kiểu vào câu lệnh SELECT của chúng tôi, điều này có thể được thực hiện dễ dàng.

Facebook Twitter Google Plus Pinterest