OpenSSL mã hóa PHP

Nó nhận một chuỗi dữ liệu nhất định và mã hóa nó bằng một khóa nhất định bằng cách sử dụng mật mã có thể định cấu hình theo mặc định là aes-256-ctr

Lớp có thể tùy chọn mã hóa dữ liệu được mã hóa bằng base64

Nó cũng có thể giải mã và giải mã dữ liệu được mã hóa trước đó bằng cùng một khóa và mật mã

OpenSSL mã hóa PHP


Sử dụng lớp này để mã hóa và giải mã dữ liệu trong php

Sử dụng an toàn. mã hóa để mã hóa dữ liệu. Sử dụng an toàn. giải mã để giải mã dữ liệu

Không nên thay đổi @param $encoded thành FALSE

Trong PHP, có thể mã hóa và giải mã chuỗi bằng cách sử dụng một trong các Tiện ích mở rộng mã hóa có tên là hàm OpenSSL để mã hóa và giải mã

Hôm nay, chúng ta hãy xem các bước được Kỹ thuật viên hỗ trợ của chúng tôi thực hiện

Hàm openssl_encrypt()

Về cơ bản, chức năng này được sử dụng để mã hóa dữ liệu

cú pháp

string openssl_encrypt( string $data, string $method, string $key,
$options = 0, string $iv, string $tag= NULL,
string $aad, int $tag_length = 16 )

Thông số

  • dữ liệu $. Nó chứa chuỗi hoặc dữ liệu cần mã hóa
  • phương thức $. Phương thức mật mã được áp dụng bằng cách sử dụng hàm openssl_get_cipher_methods()
  • khóa $. Nó giữ chìa khóa mã hóa
  • tùy chọn $. Nó giữ sự phân tách theo chiều bit của các cờ OPENSSL_RAW_DATA và OPENSSL_ZERO_PADDING
  • $iv. Nó giữ vectơ khởi tạo không phải là NULL
  • thẻ $. Nó giữ thẻ xác thực được chuyển qua tham chiếu khi sử dụng chế độ mật mã AEAD (GCM hoặc CCM)
  • $aad. Nó chứa dữ liệu xác thực bổ sung
  • $tag_length. Nó giữ độ dài của thẻ xác thực. Độ dài của thẻ xác thực nằm trong khoảng từ 4 đến 16 đối với chế độ GCM

Giá trị trả về. Sau đó, nó trả về chuỗi được mã hóa nếu thành công hoặc FALSE nếu thất bại

Hàm openssl_decrypt()

Thứ hai, Hàm openssl_decrypt() dùng để giải mã dữ liệu

cú pháp

string openssl_decrypt( string $data, string $method, string $key,
int $options = 0, string $iv, string $tag, string $aad)

Thông số

  • dữ liệu $. Nó chứa chuỗi hoặc dữ liệu cần được mã hóa
  • phương thức $. Phương thức mật mã được thông qua bằng cách sử dụng hàm openssl_get_cipher_methods()
  • khóa $. Nó giữ chìa khóa mã hóa
  • tùy chọn $. Nó giữ sự phân tách theo chiều bit của các cờ OPENSSL_RAW_DATA và OPENSSL_ZERO_PADDING
  • $iv. Nó giữ vectơ khởi tạo không phải là NULL
  • thẻ $. Nó giữ thẻ xác thực bằng chế độ mật mã AEAD (GCM hoặc CCM). Khi xác thực không thành công openssl_decrypt() trả về FALSE
  • $aad. Nó chứa dữ liệu xác thực bổ sung

Giá trị trả về. Sau đó, nó trả về chuỗi được giải mã nếu thành công hoặc FALSE nếu thất bại

Tiếp cận

Đầu tiên, khai báo một chuỗi và lưu nó vào biến và sử dụng hàm openssl_encrypt() để mã hóa chuỗi đã cho

Sau đó, sử dụng hàm openssl_encrypt() để giải mã chuỗi đã cho

ví dụ 1. Ví dụ này minh họa việc mã hóa và giải mã chuỗi

đầu ra

Original String: Welcome to GeeksforGeeks
Encrypted String: hwB1K5NkfcIzkLTWQeQfHLNg5FlyX3PNUA==
Decrypted String: Welcome to GeeksforGeeks

ví dụ 2. Ví dụ dưới đây minh họa việc mã hóa và giải mã chuỗi

Ở đây chuỗi mã hóa và chuỗi giải mã giống nhau nhưng chuỗi mã hóa thay đổi ngẫu nhiên tương ứng

đầu ra

Original String: Welcome to GeeksforGeeks
Encrypted String: hwB1K5NkfcIzkLTWQeQfHLNg5FlyX3PNUA==
Decrypted String: Welcome to GeeksforGeeks

[Mắc kẹt ở giữa?

Phần kết luận

Nói tóm lại, hôm nay chúng ta đã thấy các bước tiếp theo của Kỹ thuật viên hỗ trợ của chúng tôi để mã hóa và giải mã chuỗi php bằng OpenSSL

NGĂN CHẶN MÁY CHỦ CỦA BẠN KHỎI SỰ CỐ

Không bao giờ mất khách hàng vì tốc độ máy chủ kém. Hãy để chúng tôi giúp bạn

Các chuyên gia máy chủ của chúng tôi sẽ giám sát và bảo trì máy chủ của bạn 24/7 để nó luôn hoạt động nhanh và an toàn

Lưu ý. Tôi không phải là chuyên gia mã hóa. Tôi không muốn mật khẩu email SMTP của mình được lưu trữ trong cơ sở dữ liệu ở dạng văn bản thuần túy, vì vậy đây là giải pháp của tôi. Nếu bạn đang làm một cái gì đó tương tự, điều này sẽ ổn thôi. Nếu bạn đang lưu trữ dữ liệu SSN hoặc thẻ tín dụng, bạn sẽ muốn tham khảo ý kiến ​​của chuyên gia mã hóa

Hướng dẫn sử dụng php hiện thiếu tài liệu cho các hàm “openssl_encrypt” và “openssl_decrypt”, vì vậy, tôi đã mất một lúc để tổng hợp những việc cần làm để các hàm này hoạt động thay thế cho mcrypt, vốn đã không còn được duy trì từ năm 2003. Hy vọng rằng điều này sẽ giúp bạn đến được nơi cần đến với việc mã hóa và giải mã dữ liệu của mình

Trước tiên, bạn sẽ cần tạo một chuỗi byte giả ngẫu nhiên mà bạn sẽ sử dụng làm khóa mã hóa 256 bit. Độ dài được yêu cầu sẽ là 32 (vì 32 byte = 256 bit). Nếu bạn lặp lại phím, bạn sẽ nhận thấy rằng trình duyệt của bạn bị nghẹt. Để tránh lỗi có thể xảy ra khi lưu trữ khóa trong tệp hoặc cơ sở dữ liệu, chúng tôi sẽ base64_mã hóa khóa đó. Sử dụng mã bên dưới để tạo (các) khóa của bạn. Khóa sẽ cần được lưu vì dữ liệu phải được mã hóa và giải mã bằng cùng một khóa. Nếu dữ liệu được mã hóa của bạn đang được lưu trữ trong cơ sở dữ liệu, thì rất có thể khóa mã hóa của bạn sẽ cần được lưu trữ trong tệp cấu hình

1

$encryption_key_256bit = base64_encode(openssl_random_pseudo_bytes(32));

Bây giờ chúng tôi đã có khóa của mình, chúng tôi sẽ tạo chức năng mã hóa. Chúng tôi sẽ chuyển dữ liệu của chúng tôi sẽ được mã hóa và khóa của chúng tôi vào chức năng. Ngoài khóa của chúng tôi, còn có một chuỗi ngẫu nhiên phụ mà chúng tôi sẽ tạo và sử dụng được gọi là véc tơ khởi tạo (IV) giúp giúp tăng cường mã hóa

1

2

3

4

5

6

7

8

9

10

hàm my_encrypt($dữ liệu, $key) {

   // Xóa mã hóa base64 khỏi khóa của chúng tôi

    $encryption_key = base64_decode($key);

    // Tạo vectơ khởi tạo

    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));

    // Mã hóa dữ liệu bằng mã hóa AES 256 ở chế độ CBC bằng khóa mã hóa và vectơ khởi tạo của chúng tôi.

    $đã mã hóa = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);

    // $iv cũng quan trọng như chìa khóa để giải mã, vì vậy hãy lưu nó cùng với dữ liệu được mã hóa của chúng tôi bằng dấu tách duy nhất (. )

    return base64_encode($encrypted . '. ' . $iv);

}

Bây giờ cho chức năng giải mã

1

2

3

4

5

6

7

hàm my_decrypt($dữ liệu, $key) {

   // Xóa mã hóa base64 khỏi khóa của chúng tôi

    $encryption_key = base64_decode($key);

   // Để giải mã, hãy tách dữ liệu được mã hóa khỏi IV của chúng tôi - dấu tách duy nhất chúng tôi sử dụng là ". "

    danh sách($encrypted_data, $iv) = explode('::', base64_decode($data), 2);

    return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);

}

Để tất cả chúng cùng nhau

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<?php

//$key là khóa 256 bit được mã hóa base64 mà chúng tôi đã tạo trước đó. Bạn có thể sẽ lưu trữ và xác định khóa này trong tệp cấu hình

$key = 'bRuD5WYw5wd0rdHR9yLlM6wt2vteuiniQBqE70nAuhU=';<

 

hàm my_encrypt($dữ liệu, $key) {

   // Xóa mã hóa base64 khỏi khóa của chúng tôi

    $encryption_key = base64_decode($key);

    // Tạo vectơ khởi tạo

    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));

    // Mã hóa dữ liệu bằng mã hóa AES 256 ở chế độ CBC bằng khóa mã hóa và vectơ khởi tạo của chúng tôi.

    $đã mã hóa = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);

    // $iv cũng quan trọng như chìa khóa để giải mã, vì vậy hãy lưu nó cùng với dữ liệu được mã hóa của chúng tôi bằng dấu tách duy nhất (. )

    return base64_encode($encrypted . '. ' . $iv);

}

 

hàm my_decrypt($dữ liệu, $key) {

   // Xóa mã hóa base64 khỏi khóa của chúng tôi

    $encryption_key = base64_decode($key);

   // Để giải mã, hãy tách dữ liệu được mã hóa khỏi IV của chúng tôi - dấu tách duy nhất chúng tôi sử dụng là ". "

    danh sách($encrypted_data, $iv) = explode('::', base64_decode($data), 2);

    return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);

}

 

// dữ liệu của chúng tôi sẽ được mã hóa

$password_plain = 'abc123';

echo $password_plain . ";

 

// dữ liệu của chúng tôi được mã hóa. Dữ liệu được mã hóa này có thể sẽ được đưa vào cơ sở dữ liệu

// vì nó được mã hóa base64, nên nó có thể đi thẳng vào trường cơ sở dữ liệu varchar hoặc văn bản mà không lo bị hỏng

$password_encrypted = my_encrypt($password_plain, $key);

echo $password_encrypted . ";

 

// bây giờ chúng tôi chuyển dữ liệu được mã hóa của mình trở lại văn bản thuần túy

$password_decrypted = my_decrypt($password_encrypted, $key);

echo $password_decrypted . ";

Đoạn mã trên sẽ xuất ra như sau. Lưu ý rằng chuỗi được mã hóa ở giữa sẽ thay đổi mỗi khi bạn chạy mã nhờ vào vectơ khởi tạo của chúng tôi

Làm cách nào để mã hóa tệp PHP?

✅ Mã hóa các phần nhỏ hơn của một tệp lớn .
Tạo Vector khởi tạo ngẫu nhiên (IV).
Lưu trữ IV này ở đầu tệp được mã hóa. .
Lấy một đoạn đầu tiên, mã hóa nó bằng IV và lưu trữ nó. .
Sử dụng các ký tự đầu tiên của đoạn mã hóa cho IV tiếp theo. .
Lấy đoạn tiếp theo và lặp lại bước 3

Làm cách nào để sử dụng openssl_encrypt trong PHP?

$iv = openssl_random_pseudo_bytes($ivlen);

Làm cách nào để mã hóa văn bản trong PHP?

Mã hóa dữ liệu bằng openssl_encrypt() . Khi thành công, nó trả về chuỗi được mã hóa. Nếu không, nó trả về FALSE.

Làm cách nào để mã hóa dữ liệu bài đăng trong PHP?

php require 'encryption. php'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { // print_r($_POST);exit $nonceValue=$_POST['enckey']; $Encryption = new Encryption(); $username = $Encryption->decrypt($_POST['username'], $nonceValue); // echo 'decrypted: ' . $mobileNumber . '
'; echo 'decrypted: ' .