2012-10-24 91 views
6

Tôi đang tìm hai đoạn mã phù hợp để mã hóa một số văn bản bằng python, được giải mã bằng php. Tôi đang tìm kiếm thứ gì đó "dễ dàng" và tương thích, và bản thân tôi không có nhiều kinh nghiệm mã hóa.Mã hóa dữ liệu bằng python, giải mã trong php

Nếu ai đó có thể đưa ra ví dụ làm việc tuyệt vời!

+2

Ngôn ngữ nên không quan trọng miễn là bạn chọn một mã hóa thích hợp/giải thuật giải mã với các thư viện có sẵn. –

+0

Bạn có muốn mã hóa/giải mã hoặc mã hóa/giải mã không? http://stackoverflow.com/questions/4657416/difference-between-encoding-and-encryption Mã hóa – ale

+0

: Một văn bản rõ ràng được đưa ra một tập lệnh python trả lại một số ký tự không đọc được. Điều này được đưa ra một kịch bản php, trả về văn bản gốc. Một khóa được sử dụng trong cả hai, kịch bản python và php. – Alex

Trả lời

14

python mã hóa

from Crypto.Cipher import AES 
import base64 
import os 
# the block size for the cipher object; must be 16, 24, or 32 for AES 
BLOCK_SIZE = 32 
BLOCK_SZ = 14 

# the character used for padding--with a block cipher such as AES, the value 
# you encrypt must be a multiple of BLOCK_SIZE in length. This character is 
# used to ensure that your value is always a multiple of BLOCK_SIZE 
PADDING = '{' 

# one-liner to sufficiently pad the text to be encrypted 
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING 

# one-liners to encrypt/encode and decrypt/decode a string 
# encrypt with AES, encode with base64 
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) 
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) 
secret = "332SECRETabc1234" 
iv = "HELLOWORLD123456" 
cipher=AES.new(key=secret,mode=AES.MODE_CBC,IV=iv) 
my_text_to_encode = "password" 
encoded = EncodeAES(cipher, my_text_to_encode) 
print 'Encrypted string:', encoded 

giải mã php (lưu ý các văn bản được mã hóa chỉ là copy/dán từ in python trên)

<?php 
$enc = "x3OZjCAL944N/awRHSrmRBy9P4VLTptbkFdEl2Ao8gk="; 
$secret = "332SECRETabc1234"; // same secret as python 
$iv="HELLOWORLD123456"; // same iv as python 
$padding = "{"; //same padding as python 
function decrypt_data($data, $iv, $key) { 
    $cypher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 

    if(is_null($iv)) { 
     $ivlen = mcrypt_enc_get_iv_size($cypher); 
     $iv = substr($data, 0, $ivlen); 
     $data = substr($data, $ivlen); 
    } 

    // initialize encryption handle 
    if (mcrypt_generic_init($cypher, $key, $iv) != -1) { 
      // decrypt 
      $decrypted = mdecrypt_generic($cypher, $data); 

      // clean up 
      mcrypt_generic_deinit($cypher); 
      mcrypt_module_close($cypher); 

      return $decrypted; 
    } 

    return false; 
} 



$res = decrypt_data(base64_decode($enc), $iv, $secret); 
print rtrim($res,$padding); 
?> 
+0

hoàn hảo! cảm ơn rất nhiều – Alex

0

Bạn có thể sử dụng python-mcrypt cho python. Trong php bạn có một chức năng giải mã tương ứng với mcrypt. Tôi hy vọng các documentation trong php là rõ ràng, đủ để hiển thị như thế nào để giải mã cho mcrypt. Chúc may mắn.

Các vấn đề liên quan