2013-04-17 2 views
1

우리의 보안 부서 SSN 등 사용자의 이름을 암호화하는 256 비트 암호화를 사용하기를 원하십니다 다른 컴퓨터에 암호를 해독 할 수없는 암호화 된, 그래서 우리는 아래의 샘플 코드 JASYPT로 가기로 결정 :Jasypt는 문자열

encryptor = new StandardPBEStringEncryptor(); 
encryptor.setProvider(new BouncyCastleProvider()); 
encryptor.setAlgorithm("PBEWITHSHA256AND256BITAES-CBC-BC"); 
encryptor.setPassword(OUR_KEY) 
encryptor.encrypt("TEXT TO ECNCRYPT") 

우리가 알아 차린 문제는 응용 프로그램이 로컬 컴퓨터에서 암호화 된 레코드를 생성 할 때 app-dev 서버의 응용 프로그램이 키를 해독 할 수없고 그 반대 일지라도 키가 동일하더라도 마찬가지입니다. JASYPT가 소금에 컴퓨터 특정 정보를 추가하는 것처럼 보입니다 (Mac 주소 등).

심지어 FixedStringSaltGenerator 또는 ZeroSaltGenerator을 사용해도 도움이되지 않습니다. 우리가 프로덕션 서버를 다른 시스템으로 마이그레이션하거나 프로덕션 데이터로 미리 프로덕션 데이터를 새로 고치면 정보를 복구하는 데 2 ​​백만 년이 걸릴 수 있으므로 문제가됩니다.

보안 부서는 우리가 잘 알고있는 라이브러리를 사용하고 사내 솔루션을 양도하지 않기를 원합니다. 다른 사람이 jasypt 256 비트 암호화를 사용하여 다른 컴퓨터에서 해독 할 수있는 암호화 된 문자열을 생성 할 수있는 방법에 대한이 문제에 대한 의견을 던질 수 있습니까? 아니면 우리가 찌르지 않은 데이터로 사전 찌르는 데이터베이스를 새로 고칠 때 어떻게 이름 등을 복구 할 수 있습니까? 다른 서버를 통해 암호화 되었습니까?

유용한 통찰력을 주시면 감사하겠습니다.

+0

컴퓨터의 엔디안이 다른가요? machine1의 암호화 된 바이트 배열이 machine2의 암호화 된 바이트 배열과 같은지 확인하십시오. 일치 시키려면 [ByteBuffer] (http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/ByteBuffer.html)와 같은 것을 사용해야 할 수도 있습니다. –

+0

"* 우리는 정보를 복구하는 데 2 ​​백만 년이 필요할 수도 있습니다."> 고전 ... 나에게서 껄껄 거리는 소리가 들렸습니다. :-) –

+0

감사합니다. O'Pootertoot. 문제의 절반이 해결되었습니다. 우리의 로컬 env는 little endian 인 windows이고, 서버는 big endian 인 solaris입니다. 여러 Windows 머신 또는 Dev 및 테스트 서버에서 데이터를 암호화/해독 할 수 있지만 데이터가 Windows에서 암호화되고 서버에서 해독 될 때는 작동하지 않습니다. Jasypt가이 문제를 해결할 수있는 방법을 제공하는지 궁금합니다. –

답변

0

나는 이것이 꽤 오래된 질문이라는 것을 알고 있지만, 나는 최근에이 문제를 경험했으며, 나를위한 해결책은 기계 운영체제 엔디안의 차이와 아무 관련이 없다.

리눅스에서 특수 문자로 여겨지는 달러 기호 문자 ($)는 암호 자체의 문자와 관련이 있습니다 (Windows에서는 특별하지 않은 것으로 간주됩니다). 모든 것이 Windows에서 값을 암호화하는 데는 잘 작동했지만 Linux로 바꿔서 jasypt 명령 줄 decrypt.sh 스크립트를 사용하여 동일한 비밀번호로 값을 해독하려고하면 "작동이 불가능합니다 (잘못된 입력 또는 매개 변수) "라고 표시하고 jasypt 암호 해독 출력 인수 목록의 암호가 입력 한 암호와 다른 것으로 나타났습니다 (스크립트가 암호 문자열의 끝까지 특수 문자의 암호 부분을 잘라낸 것 같습니다).

어쨌든, 내 솔루션은 특수 문자를 사용하지 않도록 암호를 변경 한 다음 작동했습니다. 이것이 내가 이틀 동안 낭비했기 때문에이 같은 문제를두고 앞으로 일어날 가난한 영혼을 돕기를 바랍니다.

0

큰 따옴표 대신 작은 따옴표를 사용하여 입력 문자열을 래핑하십시오. 이 솔루션은 $가있는 문자열의 암호화와 암호 해독에 문제가있을 때 작동했습니다.