Cách chạy mã php được mã hóa

Bộ mã hóa PHP là một công cụ trực tuyến miễn phí cho phép bạn mã hóa trực tuyến tập lệnh php của mình để làm cho tập lệnh đó có thể chống lại hành vi trộm cắp, kiểm duyệt thô bạo

Nó sẽ không bảo mật hoàn toàn tập lệnh của bạn hoặc mã hóa nó, nhưng nó sẽ khiến một số con mắt tò mò tránh xa.

Chỉ cần dán tập lệnh của bạn ở trên và nhấp vào Mã hóa và bạn đã sẵn sàng để sử dụng

Bạn có thể dán mã nguồn đã mã hóa của mình vào trang web của mình, nó không cần thêm bất kỳ mô-đun hoặc khóa nào để chạy

Mặc dù kịch bản có thể không nhất thiết phải phổ biến trong đó bạn muốn mã hóa mã PHP của mình và thực thi nó, nhưng dù sao đó cũng là điều mà tôi sẽ coi là một cuộc thảo luận thú vị

Tôi hoàn toàn ủng hộ phần mềm mã nguồn mở và miễn phí, tuy nhiên, nếu bạn đang phát triển một ứng dụng quản lý hoặc giám sát các hệ thống hoặc dịch vụ hoặc một ứng dụng cần nằm trong môi trường “thù địch”, thì bạn nên xem xét việc mã hóa mã trước khi thực thi nó. Điều này bảo vệ mã của bạn thậm chí không bị đọc (và cuối cùng được thực thi) trừ khi khóa thích hợp được chuyển để giải mã mã đó

Trong ví dụ & phân tích sau đây, chúng tôi sẽ (riêng) sử dụng cả Mcrypt và OpenSSL để mã hóa một khối mã bằng một khóa được chỉ định. Sau đó, chúng tôi sẽ sử dụng cùng một khóa đó để giải mã mã được mã hóa để chạy nó. Lý do tại sao tôi đưa ra cả hai ví dụ là, như một số người dùng đã chỉ ra, Mcrypt không được dùng trong PHP 7 và cuối cùng bị xóa trong PHP 7. 2

Điều quan trọng cần lưu ý là khóa có thể được chuyển dưới dạng biến POST (tình cờ không được ghi nhật ký theo mặc định với hầu hết các dịch vụ web như apache hoặc nginx) hoặc nó có thể được chuyển dưới dạng biến GET hoặc bất kỳ cách nào khác thực sự. Trong ví dụ của chúng tôi, chúng tôi sẽ mã hóa cứng khóa trong mã để giữ cho mọi thứ đơn giản

Điều đầu tiên chúng tôi muốn làm là xác định biến khóa mà chúng tôi sẽ sử dụng để mã hóa mọi thứ và sau đó là kích thước IV cho phương thức và cường độ mã hóa

XÁC ĐỊNH KHÓA MÃ HÓA VÀ MÃ HÓA

Đối với MCRYPT, bạn sẽ xác định khóa và mật mã theo cách này

1

2

$key = '1234567891011120';

xác định('IV_SIZE', mcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_sizemcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));

Đối với OPENSSL, bạn sẽ xác định khóa theo cách tương tự và mật mã sẽ được khai báo trong hàm openssl_encrypt thực tế (hiển thị sau)

1

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

Ở trên quy định rằng chúng tôi sẽ sử dụng mã hóa AES 128 bit cho mcrypt và mã hóa AES 256 bit với openssl, cả hai đều có chuỗi khối mật mã (CBC). Rõ ràng là khóa không thực sự an toàn, bạn sẽ muốn thứ gì đó mạnh hơn một chút so với chỉ giá trị số, nhưng bạn hiểu ý

MÃ HÓA MÃ PHP CỦA BẠN

Điều tiếp theo chúng tôi muốn làm là xác định hai chức năng. một để mã hóa đầu vào và một để giải mã. Trước tiên, chúng tôi sẽ xác định chức năng mã hóa và thực sự đây có thể là một phần của một lớp riêng biệt hoặc tệp PHP vì chúng tôi sẽ chỉ phải mã hóa mã PHP một lần

Để mã hóa mã của bạn bằng Mcrypt

1

2

3

4

5

6

7

chức năng mã hóa($khóa, $payload) {

  $iv = mcrypt_create_iv(IV_SIZE, MCRYPT_DEV_URANDOM);

  $crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $payload, MCRYPT_MODE_CBC, $iv);

  $kết hợp = $iv . $tiền điện tử;

  $cắt xén = base64_encode($iv . $crypt);

  return $garble;

}

Để mã hóa mã của bạn bằng OpenSSL

1

2

3

4

5

chức năng mã hóa($khóa, $payload) {

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

  $đã mã hóa = openssl_encrypt($payload, ‘aes-256-cbc’, $key, 0, $iv);

  return base64_encode($encrypted . ‘. ’ . $iv);

}

Bạn có thể thấy đối với cả hai ví dụ rằng cuối cùng chúng ta đang mã hóa đầu vào hàm ($payload) bằng cách sử dụng hàm mcrypt_encrypt hoặc openssl_encrypt. Xa hơn nữa trong cả hai chức năng, bạn có thể thấy rằng chúng tôi cũng đang mã hóa nội dung được mã hóa bằng hàm base64_encode và trả về dữ liệu được mã hóa

Vì vậy, những gì bạn muốn làm là chuyển bất kỳ mã php nào tới chức năng mã hóa này và lưu đầu ra. Vì cuối cùng chúng ta sẽ chạy hàm eval đối với mã được mã hóa này, bạn không cần bao gồm các thẻ đóng/mở php đóng gói, nhưng điều đó cũng có thể phụ thuộc vào phiên bản php và môi trường máy chủ web của bạn

Khi bạn đã mã hóa và lưu mã php (có thể trong một tệp văn bản trong cùng thư mục với tập lệnh này), thì bạn có thể thực hiện phần lớn hoạt động thực tế của bài tập này

GIẢI MÃ PHP CỦA BẠN

Hãy thiết lập một chức năng giải mã mà chúng ta có thể sử dụng để diễn giải và giải mã mã

Với Mcrypt

1

2

3

4

5

6

7

chức năng giải mã($khóa, $garble) {

  $combo = base64_decode($garble);

  $iv = chất nền($combo, 0, IV_SIZE);

  $crypt = substr($combo, IV_SIZE, strlen($combo));

  $tải trọng = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypt, MCRYPT_MODE_CBC, $iv);

  return $tải trọng;

}

Với OpenSSL

1

2

3

4

chức năng giải mã($khóa, $garble) {

    danh sách($encrypted_data, $iv) = explode(‘::’, base64_decode($garble), 2);

    return openssl_decrypt($encrypted_data, ‘aes-256-cbc’, $key, 0, $iv);

}

Bạn có thể thấy rằng đối với cả chức năng giải mã Mcrypt và OpenSSL, nó rất giống với chức năng mã hóa (ngoại trừ ngược lại). Trước tiên, chúng tôi muốn sử dụng base64_decode để giải mã dữ liệu, sau đó sử dụng các hàm mcrypt_decrypt hoặc openssl_decrypt để giải mã dữ liệu. Dữ liệu sau đó được trả về để chúng tôi làm bất cứ điều gì chúng tôi muốn, đó là thực thi nó

THỰC HIỆN MÃ PHP ĐÃ GIẢI MÃ CỦA BẠN

Trong ví dụ của chúng tôi, chúng tôi sẽ chỉ cần lấy biến $payload được trả về bởi hàm decrypt và thực thi nó

1

2

$ = “dán chuỗi mã hóa vào đây”;

eval(giải mã($key, $code));

Đối với biến $code, bạn chỉ cần dán chuỗi văn bản đã mã hóa và gán nó cho biến này. Bạn có thể muốn tải nó từ một tệp hoặc một vị trí từ xa. Nó thực sự không quan trọng miễn là nó được gán cho biến này

Sau đó, chúng ta chỉ cần sử dụng hàm eval để thực hiện nó. Nhưng eval có một chức năng giải mã được thực thi lồng nhau bên trong nó để mã có thể được giải mã và trả về trước khi eval cố gắng giải mã nó. Bạn cũng có thể thấy rằng chúng tôi đang áp dụng biến $key để giải mã nó

CÁC CÁCH THAY THẾ ĐỂ CHUYỂN KHÓA MÃ HÓA CỦA BẠN ĐỂ GIẢI MÃ VÀ THỰC HIỆN MÃ PHP CỦA BẠN

Nếu bạn không muốn mã hóa cứng khóa $ trong mã của riêng mình (tại sao bạn lại muốn, nó sẽ đánh bại mục đích. ), bạn có thể chuyển nó dưới dạng biến $_POST. Một lần nữa, HTTP POST thường không được ghi lại theo mặc định trong Apache, Nginx hoặc hầu hết các dịch vụ web. HTTP GET thực sự được ghi lại để mở ra việc chuyển biến sang hiển thị. Tất nhiên, nếu trang web của bạn được mã hóa bằng HTTPS thì các biến của bạn sẽ được bảo vệ hơn nữa

Nếu bạn muốn chạy ứng dụng này dưới dạng ứng dụng bảng điều khiển, thì nó có thể được chuyển đơn giản dưới dạng đối số dòng lệnh

Để chuyển nó dưới dạng POST, thì bạn có thể chỉ cần làm điều gì đó dọc theo dòng này

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

nếu (. trống($_POST[‘dec’])) {

// Bất kể POST là gì, hãy đặt nó vào cookie. Nếu nó không phải là chìa khóa phù hợp, nó sẽ không giải mã được 🙂

        cài đặt cookie(“dec”, $_POST[‘dec’], time() + 3600);

        $_COOKIE['dec'] = $_POST[‘dec’];

        tiêu đề(“Làm mới. 0”);

}

if (isset($_COOKIE[‘dec’])) {

// Nếu cookie được đặt, hãy thử giải mã và chạy

        $key = $_COOKIE[‘dec’];

$ = “dán chuỗi mã hóa vào đây”;

        đánh giá(giải mã($key, $code));

} khác {

// Nếu không có cookie nào được đặt hoặc POST nhận được, hãy bỏ đặt các biến cookie nếu chúng đã tồn tại (vì lý do nào đó)

// Đồng thời cung cấp biểu mẫu đầu vào theo mặc định

        cài đặt cookie(“dec”, “”, time() 3600);

        $_COOKIE['dec'] = null;

        echo

                ’;

}

Điều gì đang xảy ra trong đoạn mã trên? . Chúng tôi đã triển khai một số logic đơn giản để thiết lập cookie phiên mang khóa trong cookie. Nếu có khóa, giá trị được sử dụng để cố gắng giải mã mã và thực thi nó. Nếu khóa không khớp, sẽ không có gì xảy ra

Nếu không có gì phù hợp thì cookie sẽ bị xóa (nếu có). Đây là một ví dụ đơn giản và dễ hiểu, bạn có thể thêm nhiều biện pháp bảo vệ và/hoặc các chiến lược khác với cách bạn có thể chuyển khóa vào mã để giải mã nó. Mọi thứ đều có thể

Tôi hy vọng điều này hữu ích, nó chắc chắn là một bài tập về cách sử dụng mã hóa với PHP và nếu không có gì khác sẽ giúp mọi người hiểu các loại cơ chế được tích hợp sẵn trong các khung web hiện đại như Laravel theo mặc định

Có thể mã hóa mã PHP không?

Bảo vệ mã PHP . With Zend Guard, you can encode, obfuscate and protect your PHP code to prevent unlicensed use and reverse engineering.

Làm thế nào để bảo mật mã nguồn PHP?

Nguyên tắc cơ bản để viết mã PHP an toàn .
Không bao giờ tin tưởng đầu vào của người dùng. .
Hãy nhớ câu nói này. “Làm vệ sinh đầu vào sớm, vệ sinh đầu ra muộn”.
Đôi khi bạn không kiểm soát đầu vào. .
Đôi khi bạn không kiểm soát đầu ra. .
ở đầu vào. Xác thực và vệ sinh. .
ở đầu ra. Vệ sinh và thoát hiểm. .
Trình duyệt của khách truy cập. .
Kho dữ liệu

Làm cách nào để giải mã mã PHP?

Trong ngôn ngữ lập trình PHP, Mã hóa cũng như Giải mã dữ liệu chuỗi được thực hiện bằng hàm OpenSSL . Tại đây, chúng ta có thể mã hóa và giải mã giá trị thông qua openssl_encrypt(data) và openssl_decrypt(data) tương ứng. Chúng ta có thể sử dụng một phương thức hoặc cả hai phương thức của ngôn ngữ PHP.

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

bolt_decrypt(mã_mã_mã_hóa,_khóa_mã_hóa) thao tác này sẽ thực thi mã php. Bước 2. Tải xuống tập lệnh mã hóa PHP. Sau đó thay đổi đường dẫn mã nguồn, khóa mã hóa và các tệp bị loại trừ. Sau đó chạy tập lệnh mã hóa trong máy chủ hoặc máy chủ cục bộ của bạn.