2009-12-10 4 views
1

전자 상거래 사이트의 결제 페이지에서 작업하고 있습니다. 해당 사이트에서 사람들은 신용 카드 정보를 입력하고 AES 암호화 형식으로 주문에 저장됩니다. 지원 한 모든 것이 비자 였을 때 이것은 효과가있었습니다. MasterCard 및 Discover (16 자리 숫자)를 지원하기 때문에 더 이상 작동하지 않습니다. 삽입 쿼리는 다음과 같습니다 아무 소용AES, MySql 및 두통

"insert into order_master (ccnum, ...) values (AES_ENCRYPT(:ccnum, 'password')..)"; 

모두 :

"insert into order_master set ccnum = AES_ENCRYPT(:ccnum, 'password') ..."; 

내가 또한 다른 형식을 시도했다. 누군가 내가 옳은 방향으로 나를 잘못 가르치려고 할 수 있었습니까? 나는 지금까지 엔트리 쿼리가 침투되어 값이 올바르게 삽입되었는지 확인했다. 꽤 실망스럽고 누군가 나를 도와 줄 수 있기를 바라고 있습니다. 감사! 난 당신의 SQL을하지만 mysql documentation에서 잘못된 anyting이 표시되지 않는

+0

마스터 카드와 디스커버리 카드의 16 자리 문자열을 암호화하려고 할 때, 데이터베이스에 삽입 된 값은 값을 얻기 위해 AES_decrypt를 할 수 있기 때문에 ecrypted "null"값입니다. –

+1

마스터 카드/디스커버리 카가 입력 될 때, 관련없는 [MySQL에] 이유 때문에 : ccnum 값이 null/bogus 일 수 있습니까? (Garbage in -> Garbage out ...) – mjv

+0

부정적인 점은, 불행히도 준비된 쿼리가 유효한 데이터로 올바르게 포맷되었음을 확인했습니다. –

답변

1

클라이언트의 데이터 유형이 varchar (20)로 설정되어있어 (암호화 전에 16 자만있는 카드 번호의) 모든 이진 데이터를 캡처하지 못했습니다. 나는 그에게 길이를 255로 바꿔달라고했고 지금은 훌륭하게 작동한다. 귀하의 모든 도움/제안에 감사드립니다!

0

...

AES_DECRYPT()가 유효하지 않은 데이터 또는 잘못된 패딩을 발견하면, 그것은 NULL을 반환한다. 데이터 또는 키가 잘못 입력 된 경우 AES_DECRYPT()가 NULL이 아닌 값 (가비지)을 반환 할 수 있습니다.

이렇게하면 암호를 해독 할 수 있습니다. 그러나 암호화하여 반환되는 null 값을 얻으면 두 입력 값 중 하나가 null 일 가능성이 높습니다.