Làm cách nào để mã hóa và giải mã chuỗi trong PHP?

Lam Cach Nao De Ma Hoa Va Giai Ma Chuoi Trong Php



mã hóa là quá trình chuyển đổi dữ liệu thành một mã bí mật hoặc một định dạng không thể hiểu được đối với những người không có chìa khóa để giải mã nó. giải mã là quy trình lấy thông tin đó và đưa nó về định dạng ban đầu, có thể đọc được. Trong PHP, mã hóa, giải mã có thể được sử dụng để bảo vệ dữ liệu nhạy cảm, chẳng hạn như mật khẩu, thông tin thẻ tín dụng và dữ liệu cá nhân khác.

Các mã hóa thuật toán sẽ lấy một chuỗi dữ liệu mà bạn muốn mã hóa và sử dụng phương pháp mã hóa đã chọn để mã hóa dữ liệu. Sau đó, thuật toán sẽ trả về dữ liệu được mã hóa ở định dạng mà bạn có thể lưu trữ trong cơ sở dữ liệu hoặc tệp.

ĐẾN giải mã dữ liệu, bạn nên sử dụng cùng một phương pháp mã hóa để giải mã dữ liệu đã được sử dụng để mã hóa nó. Điều này có nghĩa là bạn sẽ cần lưu trữ khóa ở đâu đó để có thể sử dụng nó để giải mã dữ liệu sau này.







Làm cách nào để mã hóa và giải mã một chuỗi PHP?

Một chuỗi PHP có thể là được mã hóa giải mã sử dụng openssl_encrpyt() openssl_decrypt() phương pháp, tương ứng.



Mã hóa chuỗi bằng hàm openssl_encrypt()

ĐẾN mã hóa một chuỗi trong PHP bằng cách sử dụng openssl_encrypt() chức năng, bạn cần cung cấp chuỗi văn bản gốc, phương thức mã hóa và khóa. Hàm này sẽ trả về dữ liệu được mã hóa, sau đó bạn có thể lưu trữ hoặc truyền dữ liệu này một cách an toàn.



Cú pháp cho openssl_encrypt() phương pháp là:





chuỗi openssl_encrypt ( sợi dây dữ liệu $ , sợi dây phương thức $ , sợi dây khóa $ , tùy chọn $ = 0 , sợi dây $iv , sợi dây thẻ $ = VÔ GIÁ TRỊ , sợi dây $ bạn , int $tag_length = 16 )
  • dữ liệu $: Chuỗi hoặc dữ liệu mà bạn muốn mã hóa.
  • phương thức $: Phương pháp mã hóa hoặc mật mã bạn muốn sử dụng. Bạn có thể lấy danh sách các phương pháp mật mã được hỗ trợ bằng cách sử dụng openssl_get_cipher_methods()
  • khóa $: Khóa mã hóa sẽ được sử dụng để mã hóa dữ liệu. Nó phải là một chuỗi có độ dài phù hợp và ngẫu nhiên, dựa trên phương pháp mật mã đã chọn.
  • tùy chọn $: Một tham số tùy chọn có thể bao gồm các cờ bổ sung cho các tùy chọn mã hóa cụ thể. Bạn có thể kết hợp các cờ bằng cách sử dụng theo bit HOẶC (|) Cờ phổ biến bao gồm OPENSSL_RAW_DATA OPENSSL_ZERO_PADDING .
  • $iv: Vectơ khởi tạo (iv) được sử dụng để mã hóa; nó phải là một giá trị ngẫu nhiên và duy nhất, được cung cấp dưới dạng một chuỗi.
  • thẻ $: Tham số tùy chọn được sử dụng cho các chế độ mật mã AEAD (Mã hóa được xác thực với dữ liệu liên kết), chẳng hạn như GCM (Chế độ Galois/Bộ đếm) hoặc CCM (Bộ đếm với CBC-MAC). Nó lưu trữ thẻ xác thực được tạo trong quá trình mã hóa.
  • Của bạn: Dữ liệu được xác thực bổ sung có thể được sử dụng cho các chế độ mật mã AEAD.
  • $tag_length: Độ dài của thẻ xác thực. Đối với chế độ GCM, độ dài thẻ nằm trong khoảng từ 4 đến 16 byte.

Ví dụ:


$simple_string = 'Chào mừng đến với Linuxhint \N ' ;
tiếng vang 'Chuỗi gốc:' . $simple_string ;
$ciphering = 'AES-128-CTR' ;
$iv_length = openssl_cipher_iv_length ( $ciphering ) ;
tùy chọn $ = 0 ;
$encryption_iv = '1234567891011121' ;
$encryption_key = 'Linux' ;
$encryption = openssl_encrypt ( $simple_string , $ciphering ,
$encryption_key , tùy chọn $ , $encryption_iv ) ;
tiếng vang 'Chuỗi được mã hóa:' . $encryption . ' \N ' ;
?>

Mã đầu tiên khai báo văn bản cơ bản “Chào mừng đến với Linuxhint” và sử dụng lệnh echo để hiển thị nó. Sau đó, nó chỉ định thuật toán mã hóa sẽ được sử dụng, AES-128-CTR . Nó cũng sử dụng các openssl_cipher_iv_length() hàm tính kích thước của vectơ khởi tạo (IV) cần thiết cho mật mã này.



Mã đặt mã hóa iv có giá trị đối với '1234567891011121' và khóa mã hóa để 'Linux' . Sau đó, chuỗi được mã hóa được hiển thị bằng lệnh echo sau khi quá trình mã hóa hoàn tất bằng lệnh openssl_encrypt() chức năng. Do vectơ khởi tạo ngẫu nhiên được sử dụng để mã hóa, chuỗi mã hóa cuối cùng sẽ thay đổi mỗi lần.

Giải mã chuỗi bằng hàm openssl_decrypt()

Để giải mã một chuỗi trong PHP, bạn có thể sử dụng openssl_decrypt() chức năng. Hàm này lấy dữ liệu được mã hóa, phương thức mã hóa và khóa làm đầu vào và trả về bản rõ được giải mã.

Cú pháp cho openssl_decrypt() phương pháp là:

chuỗi openssl_decrypt ( sợi dây dữ liệu $ , sợi dây phương thức $ , sợi dây khóa $ , int tùy chọn $ = 0 , sợi dây $iv , sợi dây thẻ $ , sợi dây $ bạn )

Các đối số được truyền cho hàm là:

  • dữ liệu $: Chuỗi mã hóa hoặc dữ liệu mà bạn muốn giải mã.
  • phương thức $: Phương pháp mã hóa hoặc mật mã được sử dụng trong quá trình mã hóa. Bạn có thể lấy danh sách các phương pháp mật mã được hỗ trợ bằng cách sử dụng openssl_get_cipher_methods()
  • khóa $: Khóa mã hóa được sử dụng để mã hóa dữ liệu. Nó phải khớp với khóa được sử dụng trong quá trình mã hóa.
  • tùy chọn $: Một tham số tùy chọn có thể bao gồm các cờ bổ sung cho các tùy chọn giải mã cụ thể. Bạn có thể kết hợp các cờ bằng toán tử OR (|) theo bit. Cờ phổ biến bao gồm OPENSSL_RAW_DATA OPENSSL_ZERO_PADDING .
  • $iv: Các vectơ khởi tạo (IV) được sử dụng trong quá trình mã hóa. Nó phải giống với IV đã được sử dụng trong quá trình mã hóa và được chuyển dưới dạng chuỗi.
  • thẻ $: Thẻ xác thực cho các chế độ mật mã AEAD (Mã hóa được xác thực với dữ liệu liên kết), chẳng hạn như GCM (Chế độ Galois/Bộ đếm) hoặc CCM (Bộ đếm với CBC-MAC). Nếu xác thực không thành công, openssl_decrypt() sẽ trả về FALSE.
  • Của bạn: Dữ liệu được xác thực bổ sung đã được sử dụng trong quá trình mã hóa cho các chế độ mật mã AEAD.

Giá trị trả về: Nếu thành công, nó sẽ trả về chuỗi đã giải mã; ngược lại, nó trả về FALSE.

Ví dụ:


$encrypted_string = 'rKaeYsYaNjkVbRPmJizrdX0xutLE' ;
tiếng vang 'Chuỗi được mã hóa:' . $encrypted_string . ' \N ' ;
$decryption_iv = '1234567891011121' ;
$ciphering = 'AES-128-CTR' ;
tùy chọn $ = 0 ;
$decryption_key = 'Linux' ;
giải mã $ = openssl_decrypt ( $encrypted_string , $ciphering ,
$decryption_key , tùy chọn $ , $decryption_iv ) ;
tiếng vang 'Chuỗi đã giải mã:' . giải mã $ ;
?>

Độ dài vectơ trong mã này được tính bằng cách sử dụng openssl_cipher_iv_length() chức năng và mã hóa iv tương tự và các tham số chính được sử dụng trong quá trình mã hóa. Thuật toán mật mã được định nghĩa là AES-128-CTR .

Chuỗi đã mã hóa trước đó được giải mã bằng thuật toán mã hóa, khóa mã hóa, cài đặt và giá trị IV bởi openssl_decrypt() chức năng. Văn bản được giải mã kết quả sau đó được hiển thị bằng lệnh echo.

Phần kết luận

Việc tạo ra các trang web thường liên quan đến mã hóa và giải mã dữ liệu. Bằng cách sử dụng mã hóa để bảo vệ dữ liệu nhạy cảm, bạn có thể tránh để người dùng của mình bị đánh cắp danh tính, gian lận và các mối đe dọa bảo mật khác. Các chuỗi trong PHP có thể được mã hóa và giải mã bởi các hàm openssl_encrypt() openssl_decrypt() chức năng. Bằng cách sử dụng cẩn thận thuật toán mã hóa và khóa, bạn có thể tạo một hệ thống mạnh mẽ và an toàn để xử lý dữ liệu nhạy cảm trong các ứng dụng PHP của mình.