CodeIgnitor: Thư viện Encryption

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Trong một ứng dụng web, việc bảo mật thông tin của người sử dụng là điều bắt buộc. Đối với các ứng dụng thương mại điện tử, việc mã hóa thông tin khách hàng, chẳng hạn như số thẻ tín dụng, điện thoại, địa chỉ, email, ... quyết định sự sống còn của website.

Thư viện Encryption của CodeIgniter được xây dựng nhằm hỗ trợ lập trình viên thực hiện mã hóa/giải mã một cách đơn giản và hiệu quả.

Thư viện Encryption sử dụng cơ chế mã hóa đối xứng. Thông điệp cần mã hóa sẽ được tiền xử lý bằng cách thực hiện phép XOR với một đoạn hash ngẫu nhiên. Sau đó, kết quả thu được sẽ được mã hóa một lần nữa bởi thư viện Mcrypt. Nếu phiên bản PHP được cài đặt không kích hoạt thư viện Mcrypt, kết quả mã hóa vẫn cung cấp một mức độ bảo mật chấp nhận được cho các ứng dụng nhỏ. Trong trường hợp sử dụng thư viện Mcrypt, mức độ bảo mật được nâng cao rất nhiều.

Quan trọng

KHÔNG sử dụng thư viện này hoặc bất kỳ thư viện mã hóa nào để lưu trữ mật khẩu người dùng, thay vào đó mật khẩu phải được băm, và ta nên băm thông qua phần mở rộng mật khẩu băm của PHP.

Thư viện Encryption cung cấp phương pháp mã hóa dữ liệu hai chiều. Để thực hiện điều này được an toàn thì thư viện này sử dụng tiện ích mở rộng PHP nhưng lưu ý là không phải tất cả các hệ thống đều có. Bạn phải đáp ứng một trong các phụ thuộc sau đây để sử dụng thư viện này:

  • OpenSSL (và PHP 5.3.3)
  • Mcrypt (và MCRYPT_DEV_URANDOM sẵn có)

Nếu không thì CI sẽ không thể cung cấp cho bạn đủ các tiêu chuẩn cần thiết cho việc mã hóa thích hợp.

Khởi tạo lớp

Giống như hầu hết các lớp khác trong CodeIgniter, thư viện mã hóa được khởi tạo trong điều khiển của bạn bằng cách sử dụng $this->load->library():

$this->load->library('encryption');

Sau khi load xong thì ta sẽ sử dụng như sau:

$this->encryption

Hành vi mặc định

Theo mặc định, thư viện Encryption sẽ sử dụng các thuật toán mã hóa AES-128 ở chế độ CBC, sử dụng encryption_key và xác thực HMAC SHA512 đã được bạn cấu hình.

Lưu ý

AES-128 được quyền chọn cả hai, vì nó được chứng minh là đủ mạnh và vì nó có khả năng mở rộng bằng phần mềm mã hóa hoặc bằng các API của các ngôn ngữ lập trình khác nhau.

Tuy nhiên, encryption_key lại không được sử dụng như vậy.

Nếu bạn đang làm quen với mật mã, bạn nên biết rằng một HMAC cũng đòi hỏi một khóa bảo mật và sử dụng khóa tương tự cho cả mã hóa và xác thực, và đây lại là điều không nên làm.

Do đó ta cần có hai khóa riêng biệt có nguồn gốc từ encryption_key đã được cấu hình là: một cho mã hóa và một cho xác thực. Điều này được thực hiện thông qua một kỹ thuật gọi là HMAC-based Key Derivation Function (HKDF).

Thiết lập encryption_key

Một khóa mã hóa là một phần của thông tin điều khiển quá trình mã hóa và cho phép một chuỗi văn bản thông thường được mã hóa, và sau đó là giải mã. Đây chính là bí quyết trong toàn bộ quá trình để cho phép bạn là người duy nhất có thể giải mã dữ liệu đã mã hóa. Sau khi một khóa được sử dụng để mã hóa dữ liệu, thì khóa tương tự sẽ chỉ cung cấp cách thức giải mã, vì vậy, không những bạn phải lựa chọn một cách cẩn thận khóa, mà bạn còn phải không được để mất nó nếu không bạn sẽ mất quyền truy cập vào dữ liệu.

Cần lưu ý rằng để đảm bảo an toàn tối đa thì không những khóa cần phải mạnh mà nó còn phải thay đổi thường xuyên. Tuy nhiên hành vi như vậy là hiếm trong thực tế, và đó là lý do tại sao CodeIgniter cung cấp cho bạn khả năng cấu hình một khóa duy nhất và nó được sử dụng (gần như) mọi lúc.

Khóa mã hóa của bạn phải đủ dài theo từng thuật toán. Đối với mã hóa AES-128 thì kích thước là 128 bit (16 byte). Bảng phía dưới có đưa ra độ dài quy định ứng với từng thuật toán.

Khóa nên nên được tạo ra một cách ngẫu nhiên, và nó không nên là một chuỗi văn bản thông thường, cũng không phải là sản phẩm của một hàm băm. Để tạo khóa ta sử dụng phương thức create_key() như sau:

// $key sẽ được gán một giá trị ngẫu nhiên kích thước 16-byte (128-bit)
$key = $this->encryption->create_key(16);

Key có thể đươc lưu tại application/config/config.php hoặc bạn có thể thiết kế cơ chế lưu trữ riêng và truyền khóa tự động khi mã hóa / giải mã.

Để lưu mã khóa của riêng bạn thì bạn mở application/config/config.php và thiết lập:

$config['encryption_key'] = 'KEY của bạn';

Phương thức create_key() trả về dữ liệu dạng nhị phân, vì vậy ta cần sử dụng bin2hex(), hex2bin() hoặc Base64-encoding để làm việc với khóa được tạo từ phương thức này. Ví dụ:

// Lấy khóa chuẩn từ hàm bin2hex():
$key = bin2hex($this->encryption->create_key(16));

// Lưu vào tập tin config bằng cách
// chuyển ngược thành dạng nhị phân:
$config['encryption_key'] = hex2bin($key>);

Hỗ trợ mật mã mã hóa và các chế độ

Lưu ý
Các thuật ngữ "mật mã" và "thuật toán mã hóa" có thể tương đồng nhau.

Mật mã dành cho di động

Do Mcrypt và OpenSSL (trong bài viết này ta gọi là driver) hỗ trợ các thuật toán mã hóa khác nhau và thường xuyên thực hiện chúng theo những cách khác nhau, nên thư viện Encryption của CI được thiết kế để có thể sử dụng chúng trong các thiết bị di động.

Chúng cũng có thể được thực hiện một cách có mục đích để phù hợp với việc triển khai chuẩn trong các ngôn ngữ lập trình khác và các thư viện.

Dưới đây là danh sách các mật mã dành cho các thiết bị di động, trong đó "tên CodeIgniter" là giá trị dạng chuỗi mà bạn phải truyền tới thư viện Encryption để sử dụng thuật toán mã hóa:

Tên Mật mã Tên CodeIgniter Chiều dài key (bit / byte) Chế độ hỗ trợ
AES-128 / Rijndael-128 aes-128 128/16 CBC, CTR, CFB, CFB8, OFB, ECB
AES-192 aes-192 192/24 CBC, CTR, CFB, CFB8, OFB, ECB
AES-256 aes-256 256/32 CBC, CTR, CFB, CFB8, OFB, ECB
DES des 56/7 CBC, CFB, CFB8, OFB, ECB
TripleDES TripleDES 56/7, 112/14, 168/21 CBC, CFB, CFB8, OFB
Blowfish blowfish 128-448 / 16-56 CBC, CFB, OFB, ECB
CAST5 / CAST-128 cast5 88-128 / 11-16 CBC, CFB, OFB, ECB
RC4 / ARCFour rc4 40-2048 / 5-256 Suối
Quan trọng
Bởi vì cách Mcrypt hoạt động, nếu bạn không cung cấp một khóa với độ dài thích hợp, bạn có thể kết thúc bằng cách sử dụng một thuật toán khác nhau hơn so với một cấu hình, vì vậy hãy thực sự cẩn thận với điều đó!

Lưu ý

- Trong trường hợp nó không phải là rõ ràng từ bảng trên, Blowfish, CAST5 và hỗ trợ RC4 phím dài biến. Đó là, bất kỳ số lượng trong phạm vi được thể hiện là hợp lệ, mặc dù về mặt chút mà chỉ xảy ra trong gia số 8-bit.

- Mặc dù CAST5 hỗ trợ chiều dài khóa thấp hơn so với 128 bit (16 byte), trong thực tế, họ sẽ chỉ là zero-đệm với chiều dài tối đa, như quy định trong RFC 2144.

- Blowfish hỗ trợ chiều dài khóa nhỏ như 32 bit (4 byte), nhưng các xét nghiệm của chúng tôi đã chỉ ra rằng chỉ có độ dài 128 bit (16 byte) hoặc cao hơn được hỗ trợ đúng bởi cả hai Mcrypt và OpenSSL. Nó cũng là một thực tế xấu để sử dụng phím dài thấp như vậy anyway.

Các mật mã điều khiển cụ thể

Tên Mật mã Driver Chiều dài key (bit / byte) Chế độ hỗ trợ
AES-128 OpenSSL 128/16 CBC, CTR, CFB, CFB8, OFB, ECB, XTS
AES-192 OpenSSL 192/24 CBC, CTR, CFB, CFB8, OFB, ECB, XTS
AES-256 OpenSSL 256/32 CBC, CTR, CFB, CFB8, OFB, ECB, XTS
Rijndael-128 Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
Rijndael-192 Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
Rijndael-256 Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
GOST Mcrypt 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
twofish Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
CAST-128 Mcrypt 40-128 / 5-16 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
CAST-256 Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
Loki97 Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
SaferPlus Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
Serpent Mcrypt 128/16, 192/24, 256/32 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
XTEA Mcrypt 128/16 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
RC2 Mcrypt 8-1024 / 1-128 CBC, CTR, CFB, CFB8, OFB, OFB8, ECB
RC2 OpenSSL 8-1024 / 1-128 CBC, CFB, OFB, ECB
Camellia-128 OpenSSL 128/16 CBC, CFB, CFB8, OFB, ECB
Camellia-192 OpenSSL 192/24 CBC, CFB, CFB8, OFB, ECB
Camellia-256 OpenSSL 256/32 CBC, CFB, CFB8, OFB, ECB
hạt OpenSSL 128/16 CBC, CFB, OFB, ECB

Lưu ý

- Nếu bạn muốn sử dụng một trong những thuật toán mã hóa, bạn phải vượt qua tên của nó trong trường hợp thấp hơn đến các thư viện mã hóa.

- Bạn đã có thể nhận thấy rằng tất cả cipers AES (Rijndael và-128) cũng được liệt kê trong danh sách mật mã di động. Điều này là do trình điều khiển hỗ trợ các chế độ khác nhau cho các thuật toán mã hóa. Ngoài ra, điều quan trọng là cần lưu ý rằng AES-128 và Rijndael-128 thực sự là những mật mã giống nhau, nhưng chỉ khi được sử dụng với một phím 128-bit.

- CAST-128 / CAST-5 cũng được liệt kê trong cả di động và trình điều khiển cụ thể danh sách các mật mã. Điều này là do thực hiện OpenSSL không xuất hiện để được làm việc đúng với kích thước khóa 80 bit và thấp hơn.

- RC2 được liệt kê như là hỗ trợ bởi cả hai Mcrypt và OpenSSL. Tuy nhiên, cả hai trình điều khiển thực hiện chúng một cách khác nhau và họ là không cầm tay. Nó có lẽ là đáng chú ý là chúng tôi chỉ tìm thấy một nguồn vô danh xác nhận rằng nó là Mcrypt đó là không đúng thực hiện nó.

Các chế độ mã hóa

Các chế độ mã hóa khác nhau có những đặc điểm khác nhau và phục vụ cho các mục đích khác nhau. Một số chế độ mã hóa thì mạnh, một số lại nhanh hơn và cung cấp một số tính năng bổ sung. Bảng dưới đây cung cấp tài liệu tham khảo thông tin ngắn gọn về các chế độ mã hóa.

Tên chế độ Tên CodeIgniter Driver hỗ trợ Thông tin bổ sung
CBC cbc Mcrypt, OpenSSL Một sự lựa chọn mặc định an toàn
CTR ctr Mcrypt, OpenSSL Về lý thuyết thì tốt hơn so với CBC, nhưng không được phổ biến rộng rãi.
CFB CFB Mcrypt, OpenSSL N / A
CFB8 cfb8 Mcrypt, OpenSSL Tương tự như CFB, nhưng hoạt động ở chế độ 8-bit (không khuyến khích).
OFB ofb Mcrypt, OpenSSL N / A
OFB8 ofb8 Mcrypt Tương tự như OFB, nhưng hoạt động ở chế độ 8-bit (không khuyến khích).
ECB ECB Mcrypt, OpenSSL Bỏ qua IV (không khuyến khích).
XTS XTS OpenSSL Thường được sử dụng để mã hóa dữ liệu truy cập ngẫu nhiên như RAM hay lưu trữ đĩa cứng.
Stream stream Mcrypt, OpenSSL Đây thực ra không phải là một chế độ, nó chỉ là mật mã stream đang được sử dụng. Điều này là cần thiết vì các quá trình khởi tạo chế độ + mật mã chung.

Độ dài thông điệp (Message Length)

Có một điều quan trọng bạn cần biết là độ dài chuỗi đã được mã hóa thường dài hơn chuỗi gốc (là chuỗi văn bản thông thường), dài hơn bao nhiêu phụ thuộc vào mật mã. Cụ thể, IV thêm vào phía trước văn bản mật mã và thông điệp xác thực HMAC cũng được thêm vào phía trước. Hơn nữa, thông điệp được mã hóa cũng có thể là Base64-encoding cho nên nó đủ an toàn để lưu trữ và truyền dẫn.

Bạn cần ghi nhớ điều trên khi lựa chọn cơ chế lưu trữ dữ liệu. Ví dụ như Cookie chỉ có thể lưu giữ 4KB của thông tin.

Cấu hình thư viện

Thư viện Encryption được thiết kế để có thể sử dụng driver, mật mã mã hóa, chế độ và key nhiều lần.

Như đã đề cập trong phần "Hành vi mặc định" ở trên, điều này có nghĩa là sử dụng một driver tự động phát hiện (OpenSSL có một ưu tiên cao hơn), các ciper AES-128 trong chế độ CBC, và giá trị $config['encryption_key'] của bạn.

Tuy nhiên, nếu muốn ta có thể thay đổi điều này bằng cách sử dụng phương thức initialize(). Phương thức này chấp nhận một mảng kết hợp các thông số, tất cả đều là tùy chọn:

Tùy chọn Giá trị có thể
driver 'mcrypt', 'openssl'
cipher Tên mật mã
mode Chế độ mã hóa
key Khóa mã hóa

Ví dụ, nếu bạn đã thay đổi thuật toán mã hóa và chế độ mã hóa AES-256 ở chế độ CTR, thì bạn nên làm như sau:

$this->encryption->initialize(
        array(
                'cipher' => 'aes-256',
                'mode' => 'ctr',
                'key' => '<một chuỗi ngẫu nhiên 32 ký tự>'
        )
);

Cần lưu ý rằng ở đây ta chỉ đề cập đến việc thay đổi ciper và mode, nhưng ở ví dụ trên ta đề cập đến cả key. Như đã nói ở trên, điều quan trọng là ta cần chọn một key có kích thước thích hợp với các thuật toán được dùng đến.

Ngoài ra ta còn có khả năng thay đổi driver, nếu vì một lý do nào đó ta có đẩy đủ nhưng chỉ muốn sử dụng Mcrypt thay vì OpenSSL thì ta làm như sau:

//Chuyển sang driver Mcrypt 
$this->encryption->initialize(array('driver' => 'mcrypt'));

//chuyển về driver OpenSSL
$this->encryption->initialize(array('driver' => 'openssl'));

Mã hoá và giải mã dữ liệu

Mã hoá và giải mã dữ liệu với các thiết lập thư viện đã được cấu hình là công việc khá đơn giản với CI, đơn giản là ta chỉ cần truyền một chuỗi tới phương thức the encrypt() và / hoặc decrypt():

$plain_text = 'Đây là một tin nhắn văn bản đơn giản!';
$ciphertext = $this->encryption->encrypt($plain_text);

// Đầu ra: Đây là một tin nhắn văn bản đơn giản!
echo $this->encryption->decrypt($ciphertext);

Thư viện Encryption sẽ làm tất cả mọi thứ cần thiết cho toàn bộ quá trình được mã hóa an toàn ngoài khối và bạn không cần phải lo lắng về nó nữa.

Quan trọng

Cả hai phương thức trên đều sẽ trả về FALSE trong trường hợp có lỗi, trong khi đối với phương thức encrypt() lỗi này có nghĩa là cấu hình không chính xác, thì bạn cần luôn luôn kiểm tra giá trị trả về của decrypt() khi gặp lỗi.

Cách thức hoạt động

Dưới đây là cách thức hoạt động của hai phương thức này:

  • $this->encryption->encrypt($plain_text)

    1. Lấy ra một khoá mật mã và khóa HMAC từ cấu hình encryption_key qua HKDF, sử dụng SHA-512 để thực hiện thuật toán.

    2. Tạo một vector khởi tạo ngẫu nhiên (IV).

    3. Mã hóa dữ liệu thông qua mã hóa AES-128 trong chế độ CBC (hoặc một thuật toán mã hóa và chế độ cấu hình từ trước), sử dụng khóa mã hóa có nguồn gốc nói trên và IV.

    4. Thêm vào trước IV kết quả thuật toán mã hóa văn bản.

    5. Mã hóa Base64 cho kết quả dạng chuỗi, do đó nó có thể được lưu trữ an toàn hoặc chuyển đổi mà không cần lo lắng về tập ký tự.

    6. Tạo tin nhắn xác thực SHA-512 HMAC sử dụng phím HMAC nguồn gốc để đảm bảo tính toàn vẹn dữ liệu và thêm vào trước nó vào chuỗi Base64.

  • $this->encryption->decrypt($ciphertext)

    1. Lấy ra một khoá mật mã và khóa HMAC từ cấu hình encryption_key qua HKDF, sử dụng SHA-512 để thực hiện thuật toán. Do cấu hình encryption_key là như nhau, nên sẽ tạo ra những kết quả tương tự như trong phương thức encrypt() ở trên - nếu không bạn sẽ không thể giải mã nó.

    2. Kiểm tra nếu chuỗi là đủ dài thì tách HMAC ra khỏi nó và xác nhận nó đúng hay không (điều này được thực hiện nhằm ngăn chặn các cuộc tấn công trở lại). Trả về FALSE nếu một trong các kiểm tra lỗi.

    3. Giải mã chuỗi Base64.

    4. Tách IV ra khỏi thuật toán mã hóa văn bản và giải mã nó sử dụng IV và khóa mã hóa đã lấy ra.

Sử dụng các tham số tùy chỉnh

Bạn có thể tương tác với các hệ thống khác nằm ngoài tầm kiểm soát của bạn và sử dụng một phương thức khác để mã hóa dữ liệu, phương thức này không tuân theo trình tự nêu trên.

Thư viện Encryption cho phép ta thay đổi cách mã hóa và giải mã quá trình làm việc của nó, do đó bạn có thể dễ dàng điều chỉnh một giải pháp tùy chỉnh cho các tình huống như vậy.

Lưu ý

Có thể sử dụng các thư viện trong cách này, mà không cần thiết lập một encryption_key trong tập tin cấu hình của bạn.

Việc bạn cần phải làm là truyền một mảng kết hợp với một vài tham số cho một trong hai phương thức encrypt() hoặc decrypt. Ví dụ:

// Giả sử rằng chúng ta có $ciphertext, $key và $hmac_key từ nguồn bên ngoài

$message = $this->encryption->decrypt(
        $ciphertext,
        array(
                'cipher' => 'blowfish',
                'mode' => 'cbc',
                'key' => $key,
                'hmac_digest' => 'sha256',
                'hmac_key' => $hmac_key
        )
);

Trong ví dụ trên, ta giải mã một thông điệp đã được mã hóa bằng cách sử dụng thuật toán mã hóa Blowfish trong chế độ CBC và xác thực thông qua một HMAC SHA-256.

Quan trọng

Lưu ý rằng cả 'key' và 'hmac_key' đều được sử dụng trong ví dụ này. Khi sử dụng các tham số tùy chỉnh, mã hóa và khóa HMAC không bắt nguồn như hành vi mặc định của thư viện.

Dưới đây là một danh sách các tham số tùy chọn có sẵn. Tuy nhiên, trừ khi bạn thực sự cần và bạn biết những gì bạn đang làm, lời khuyên đưa ra là bạn không thay đổi quá trình mã hóa như đã trình bày ở trên vì có thể ảnh hưởng đến an toàn, vì vậy hãy làm điều này một cách thận trọng.

Tùy chọn Giá trị mặc định Bắt buộc / tùy chọn Sự miêu tả
cipher N/A Thuật toán mã hóa.
mode N/A Chế độ mã hóa.
key N/A Khóa mã hóa.
HMAC TRUE Không Nếu thiết lập là FALSE thì hmac_digest và hmac_key sẽ bị bỏ qua.
hmac_digest SHA512 Không Thông điệp HMAC yêu cầu thực hiện thuật toán.
hmac_key N/A Có, trừ khi HMAC là FALSE Khóa HMAC.
raw_data FALSE Không Nếu thiết lập là TRUE thì mã hóa và giải mã Base64 sẽ không được thực hiện và HMAC sẽ không thể là một chuỗi thập lục phân.

Quan trọng

encrypt() và decrypt() sẽ trả về FALSE nếu một tham số bắt buộc không được cung cấp hoặc nếu giá trị được cung cấp không chính xác, tham số bắt buộc ở đây là hmac_key, trừ khi HMAC được đặt là FALSE.

Các thuật toán xác thực HMAC được hỗ trợ

Để xác thực thông điệp HMAC, thư viện Encryption hỗ trợ việc sử dụng thuật toán SHA-2:

Thuật toán Chiều dài (byte) Chiều dài mã hóa hệ 16 (byte)
SHA512 64 128
sha384 48 96
sha256 32 64
sha224 28 56

Lý do của việc không sử dụng các thuật toán phổ biến khác như MD5 hoặc SHA1 là do chúng không còn được coi là đủ an toàn và như vậy, ta không nên sử dụng chúng. Nếu bạn buộc cần phải sử dụng chúng bạn có thể sử dụng hàm hash_hmac() của PHP.

Tham chiếu lớp CI_Encryption

initialize($params)

Tham số:
  • $ params (array) - các tham số cấu hình
Giá trị trả về:

Thể hiện của CI_Encryption

Kiểu trả về:

CI_Encryption

Phương thức này dùng để khởi tạo (cấu hình) thư viện để sử dụng trình điều khiển, thuật toán mã hóa, chế độ hoặc key khác nhau.

Ví dụ:

$this->encryption->initialize(
        array('mode' => 'ctr')
);

encrypt($data[$params = NULL])

Tham số:
  • $datachuỗi ) - Dữ liệu mã hóa
  • $ params(array) - Các tham số tùy chọn
Giá trị trả về:

 Dữ liệu được mã hóa hoặc FALSE nếu thất bại

Kiểu trả về:

string

Phương thức này có tác dụng mã hóa dữ liệu đầu vào và trả về giá trị mã hóa dạng văn bản.

Vi dụ:

$ciphertext = $this->encryption->encrypt('My secret message');

decrypt($data[$params = NULL])

Tham số:
  • $data(string) - Số liệu để giải mã
  • $ params (array) - Các tham số tùy chọn
Giá trị trả về:

Dữ liệu được giải mã hoặc FALSE nếu thất bại

Kiểu trả về:

string

Phương thức có nhiệm vụ giải mã các dữ liệu đầu vào và trả về nó dưới dạng văn bản thông thường.

Ví dụ:

echo $this->encryption->decrypt($ciphertext);

create_key($length)

Tham số:
  • $length(int) - Chiều dài đầu ra
Trả về:

Khóa mật mã giả ngẫu nhiên với chiều dài xác định, hoặc FALSE nếu thất bại

Kiểu trả về:

string

Nhiệm vụ của phương thức là tạo một khóa mật mã bằng cách lấy dữ liệu ngẫu nhiên từ các nguồn của hệ điều hành (ví dụ /dev/urandom).

hkdf($key[$digest = 'sha512'[$salt = NULL[$length = NULL[$info = '']]]])

Tham số:
  • $key(string) - Dữ liệu khóa đầu vào
  • $digest(string) - Một thuật toán SHA-2
  • $salt(string) - Tùy chọn
  • $length(int) - Chiều dài đầu ra tùy chọn
  • $info(string) - Tùy chọn bối cảnh / thông tin ứng dụng cụ thể
Trả về:

Một key giả ngẫu hoặc FALSE nếu thất bại

Kiểu trả về:

string

Phương thức này được sử dụng nội bộ để lấy mật mã và khóa HMAC từ cấu hình encryption_key.

Ví dụ:

$hmac_key = $this->encryption->hkdf(
        $key,
        'sha512',
        NULL,
        NULL,
        'authentication'
);

//$hmac_key là một key giả ngẫu nhiên với chiều dài 64 byte
» Tiếp: Thư viện Session - Khởi tạo và hoạt động
« Trước: Lớp Email
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!