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ã


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

Chủ Đề