2012-10-24 2 views
6

나는 PHP로 디코딩 될 파이썬으로 어떤 텍스트를 인코딩하기위한 두 가지 피팅 코드 스 니펫을 찾고 있습니다. "쉽고"무언가를 찾고 있는데, 나는 암호화 경험이별로 없다.파이썬으로 데이터 암호화, PHP에서 암호 해독

누군가가 훌륭한 사례를 제시 할 수 있다면!

+2

언어해야 문제가되지만큼 당신이 적절한 암호화를 선택로/기존의 라이브러리가있는 해독 알고리즘. –

+0

인코딩/디코딩 또는 암호화/해독 하시겠습니까? http://stackoverflow.com/questions/4657416/difference-between-encoding-and-encryption – ale

+0

암호화 : 일반 텍스트는 읽을 수없는 문자를 반환하는 파이썬 스크립트를 제공합니다. PHP 스크립트가 주어지며 원본 텍스트가 반환됩니다. 키는 파이썬과 PHP 스크립트 모두에서 사용됩니다. – Alex

답변

14

파이썬 암호화

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 

PHP를 해독 (인코딩 된 텍스트를 참고 단지/위 파이썬 인쇄에서 붙여 복사됩니다)

<?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

완벽! 고마워. – Alex

0

파이썬에는 python-mcrypt을 사용할 수 있습니다. PHP에서는 mcrypt에 해당하는 암호 해독 기능이 있습니다. 나는 PHP에서 documentation이 mcrypt를 해독하는 방법을 보여주기에 충분할만큼 명확하다고 희망한다. 행운을 빕니다.