Hướng dẫn mcrypt_encrypt alternative php 7 - mcrypt_encrypt thay thế php 7

Hàm McRypt đã được không dùng nữa kể từ Php 7.1.0.

Chức năng mã hóa / giải mã chuỗi không dùng của tôi:

$key: secret key
$str: string


$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));

$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($str), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

Bạn có thể đề xuất một số lựa chọn thay thế?

hỏi ngày 19 tháng 1 năm 2017 lúc 11:24Jan 19, 2017 at 11:24

Hướng dẫn mcrypt_encrypt alternative php 7 - mcrypt_encrypt thay thế php 7

3

Thay vào đó, bạn nên sử dụng openSSL_encrypt.

Hướng dẫn mcrypt_encrypt alternative php 7 - mcrypt_encrypt thay thế php 7

Tim Cooper

154K37 Huy hiệu vàng322 Huy hiệu bạc275 Huy hiệu Đồng37 gold badges322 silver badges275 bronze badges

Đã trả lời ngày 19 tháng 1 năm 2017 lúc 11:43Jan 19, 2017 at 11:43

Aleksa Arsićaleksa ArsićAleksa Arsić

5241 Huy hiệu vàng9 Huy hiệu bạc15 Huy hiệu đồng1 gold badge9 silver badges15 bronze badges

1

Xem xét sử dụng Defuse hoặc RNCryptor, chúng cung cấp một giải pháp hoàn chỉnh, đang được duy trì và là chính xác.

Đã trả lời ngày 19 tháng 1 năm 2017 lúc 12:10Jan 19, 2017 at 12:10

Zaphzaphzaph

Huy hiệu vàng 111K2121 gold badges188 silver badges224 bronze badges

Đối với MCRYPT_RIJNDAEL_256 tôi đã đăng một câu trả lời đầy đủ cho PHP7.3 tại đây: https://stackoverflow.com/a/53937314/243782

snippet:

hoạt động như thế này với thư viện phpseclib

$rijndael = new \phpseclib\Crypt\Rijndael(\phpseclib\Crypt\Rijndael::MODE_ECB);
$rijndael->setKey(ENCRYPT_KEY);
$rijndael->setKeyLength(256);
$rijndael->disablePadding();
$rijndael->setBlockLength(256);

$decoded = $rijndael->decrypt($term);

Đã trả lời ngày 26 tháng 12 năm 2018 lúc 21:33Dec 26, 2018 at 21:33

Hướng dẫn mcrypt_encrypt alternative php 7 - mcrypt_encrypt thay thế php 7

Pentium10Pentium10Pentium10

202K119 Huy hiệu vàng414 Huy hiệu bạc494 Huy hiệu đồng119 gold badges414 silver badges494 bronze badges

echo encrypt_openssl($str, $key);

function encrypt_openssl($msg, $key, $iv = null) {
        $iv_size = openssl_cipher_iv_length('AES-256-CBC');
        if (!$iv) {
            $iv = openssl_random_pseudo_bytes($iv_size);
        }
        $encryptedMessage = openssl_encrypt($msg, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
        return base64_encode($iv . $encryptedMessage);
    }

McRypt có thể bị xóa trong Php 7.1 OpenSSL thay thế may be removed in PHP 7.1 alternative openssl

Đã trả lời ngày 29 tháng 5 năm 2019 lúc 6:48May 29, 2019 at 6:48

Hướng dẫn mcrypt_encrypt alternative php 7 - mcrypt_encrypt thay thế php 7

Như đã đề cập ở trên, Open_SSL là một giải pháp thay thế tốt cho McRypt. Vấn đề duy nhất tôi gặp phải với Open_SSL, là nó không thể được sử dụng cho các chuỗi lớn.

Tôi đã viết một kịch bản (lớp tĩnh), khắc phục vấn đề này (các chuỗi lớn được chia thành các khối và được mã hóa/giải mã riêng biệt trong nền).

Xem Công khai Gist: https://gist.github.com/petermuller71/33616D55174D9725FC00A663D30194BA

Đã trả lời ngày 22 tháng 11 năm 2017 lúc 9:27Nov 22, 2017 at 9:27

Sau khi điều tra thêm, tôi đã mở rộng câu trả lời của mình và chia nó thành hai. Đầu tiên giải quyết vấn đề McRypt và Php 7.2 và sau đó là khả năng tương thích của Drupal/Civicrm và Php 7.2.

Php 7.2 và McRypt

Như đã nêu ở trên và trích dẫn liên kết với các hướng dẫn cài đặt cho McRypt:

Do sự kết thúc của sự phát triển của Mở rộng McRypt, việc mở rộng cũng được loại bỏ khỏi Php 7.2 và chuyển sang kho lưu trữ PECL không chính thức. Tuy nhiên, bạn vẫn có thể tìm thấy sự mở rộng của McRypt trong PHP 5.4 đến PHP 7.1. Sự xuất hiện của Php 7.2 đã được công bố nhưng nó đã giành được sự mở rộng của McRypt. Đối với PHP 7.2+, thay vào đó, PHP sử dụng libsodium làm thư viện mật mã.

Có một lý do tại sao McRypt bị xóa khỏi Php 7.2, việc tự cài đặt nó không phải là một ý tưởng tốt.

Nếu LibMcrypt vẫn đang được duy trì, chúng tôi có thể làm việc với nhóm LibMcrypt để cải thiện nó. Thật không may, nó đã bị bỏ rơi vào năm 2007, và chứa các lỗi và bản vá không bao giờ sẽ không bao giờ được hợp nhất.

Ngoài ra, libsodium đã được sử dụng để thay thế McRypt trong bản phát hành PHP mới nhất (7.2). Trong trường hợp của Drupal, bạn có thể đọc nhận xét sau trong vấn đề này, nơi bạn cũng có tùy chọn sử dụng phpseclib:libsodium was used to replace mcrypt in the latest php release (7.2). In the case of Drupal, you can read the following comment in this issue, where you also have the option of using phpseclib:

Đối với tùy chọn mặc định phiên bản 7.x-1.x đã thay đổi để sử dụng phpseclib. Vì vậy, để tránh sử dụng McRypt trong các hồ sơ/gói lớn hơn như Commerce, người ta nên thêm mô -đun thư viện và tải phpseclib vào vị trí thích hợp. Điều này có thể dễ dàng đạt được bằng cách sử dụng hồ sơ Drupal.

Vì vậy, với PHP 7.2, bạn có thể sử dụng libsodium, phpseclib hoặc openSSL nếu bạn quan tâm đến bảo mật ứng dụng của mình và dành thời gian để thực hiện nó.

Drupal / Civicrm và Php 7.2

Drupal 7 không hỗ trợ PHP 7. 2 Trong bản phát hành 7.59 hiện tại của nó, nó sẽ từ phiên bản 7.60 trở đi.

Civicrm 5.x hỗ trợ lên đến Php 7.1

Như bạn có thể thấy, cả hai đều hỗ trợ Php 7.1, vì vậy tôi sẽ khuyên bạn nên cài đặt phiên bản đó thay vì 7.2 và mọi thứ nên hoạt động như mong đợi.