AES ENCRYPT, AES DECRYPT

MYSQL COMPATIBLE AES ENCRYPTION / DECRYPTION
MySQL 호환 AES 암호화 / 복호화

1 PHP[ | ]

PHP
Copy
// patrickdk at patrickdk dot com - http://php.net/manual/en/ref.mcrypt.php
function AES_ENCRYPT($val,$ky) { 
        $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; 
        for($a=0;$a<strlen($ky);$a++) $key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a])); 
        $mode = MCRYPT_MODE_ECB; 
        $enc = MCRYPT_RIJNDAEL_128; 
        $val = str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16))); 
        return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM)); 
}
 
function AES_DECRYPT($val,$ky) { 
        $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; 
        for($a=0;$a<strlen($ky);$a++) $key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a])); 
        $mode = MCRYPT_MODE_ECB; 
        $enc = MCRYPT_RIJNDAEL_128; 
        $dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM ) ); 
        return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null)); 
}
 
echo md5(AES_ENCRYPT('hello world', 'key')).PHP_EOL;
// a4c366bf1ffb59be4c0be00f89166e4d
echo AES_DECRYPT(AES_ENCRYPT('hello world','key'), 'key').PHP_EOL;
// hello world

echo md5(AES_ENCRYPT('안녕 친구들', '비밀키')).PHP_EOL;
// 0a9fd16fae30dc9fa87515a7dbcf3422
echo AES_DECRYPT(AES_ENCRYPT('안녕 친구들','비밀키'), '비밀키').PHP_EOL;
// 안녕 친구들

2 Python[ | ]

Python
Copy
from Crypto.Cipher import AES

def AES_ENCRYPT(msg, key):
        msg2 = 16 - (len(msg) % 16)
        msg2 = '%s%s' % (msg, chr(msg2)*msg2)
        key2 = bytearray(16)
        for i, c in enumerate(key): key2[i%16] ^= ord(key[i])
        return AES.new(bytes(key2), AES.MODE_ECB).encrypt(msg2)

def AES_DECRYPT(msg, key):
	key2 = bytearray(16)
        for i, c in enumerate(key): key2[i%16] ^= ord(key[i])
	dec = AES.new(bytes(key2), AES.MODE_ECB).decrypt(msg)
        return dec[:-ord(dec[len(dec) - 1])]

from hashlib import md5
print( md5(AES_ENCRYPT('hello world', 'key')).hexdigest() )
# a4c366bf1ffb59be4c0be00f89166e4d
print( AES_DECRYPT(AES_ENCRYPT('hello world', 'key'), 'key') )
# hello world

print( md5(AES_ENCRYPT('안녕 친구들', '비밀키')).hexdigest() )
# 803b80e0206a0faeb5ce179ec02e612c
print( AES_DECRYPT(AES_ENCRYPT('안녕 친구들', '비밀키'), '비밀키') )
# 안녕 친구들

3 SQL[ | ]

3.1 MySQL[ | ]

sql
Copy
SELECT HEX( AES_ENCRYPT('hello world', 'key') );
-- EE21283CA34FC340C65234E030EFCCD8
SELECT MD5( AES_ENCRYPT( 'hello world', 'key' ) );
-- a4c366bf1ffb59be4c0be00f89166e4d
SELECT AES_DECRYPT(AES_ENCRYPT('hello world','key'), 'key');
-- hello world

SELECT HEX( AES_ENCRYPT('안녕하세요', 'key') );
-- 192A4EF5C139F411DBA75BEF0BFB2D22
SELECT MD5( AES_ENCRYPT('안녕하세요', 'key') );
-- 75af28bf601eb7142a85fa52c791190f
SELECT AES_DECRYPT(AES_ENCRYPT('안녕하세요', 'key'), 'key');
-- ec9588eb8595ed9598ec84b8ec9a94
SELECT CONVERT( AES_DECRYPT( AES_ENCRYPT('안녕하세요', 'key'), 'key') USING utf8);
-- 안녕하세요

SELECT HEX( AES_ENCRYPT('안녕하세요', '비밀키') );
-- 73813BCA89FDEB8B629C7C1D0E4924EE
SELECT MD5( AES_ENCRYPT('안녕하세요', '비밀키') );
-- ae2502ff273e98ed54f2935c6cf8e77b
SELECT AES_DECRYPT(AES_ENCRYPT('안녕하세요', '비밀키'), '비밀키');
-- ec9588eb8595ed9598ec84b8ec9a94
SELECT CONVERT( AES_DECRYPT( AES_ENCRYPT('안녕하세요', '비밀키'), '비밀키') USING utf8);
-- 안녕하세요

4 같이 보기[ | ]

  • PHP 파일 다운로드 구현 2 (한글 파일명 지원)
    제가 파일다운로드 관련된 것이 서툴러서 파일 다운로드 부분을 인용하였습니다. 죄송합니다.
  • PHP에서 오라클 DB 사용
    감사합니당. YoWu
  • PHP 파일 업로드 구현
    파일정보 출력에서 $name $ext 가 정상적으로 출력되나요? 전부 echo의 쌍따옴표안에 있는데? 일리단사오육칠
  • PHP 파일 업로드 구현
    PHP echo에서 쌍따옴표 안의 변수는 해석되어 출력됩니다. 위 소스에서도 $name와 $ext가 두껍게 나와있죠? 일반 문자열과는 다르다는 표시죠.J Jmnote
  • PHP 파일 다운로드 구현 2 (한글 파일명 지원)
    'Windows NT 6.1' << 이부분은 접속한 윈도우의 플랫폼을 뜻하는걸로 압니다. ie11 접속하면 다음과 같이 바뀌었고 Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko rv:11.0 << 이부분이 Anmkst
  • Lib my.php
    Fatal error: Uncaught Error: Call to undefined function insert_rows() in D:\xampp\htdocs\naru\import_excel.php:38 Stack trace: #0 {main} thrown in D:\xampp\htdo 신정섭
  • Lib my.php
    함수 query()를 사용하면 됩니다. 예시 추가했으니 참고바랍니다.J Jmnote
  • 로또번호 생성
    초보를 위한 개발 실습 과제로군요 ㅎㅎ Pinkcrimson