문제

우리는 Java에서 Rijndael 개발을해야합니다.

우리에게 도움이 될 기사, 도서관 등에 대한 권장 사항이 있습니까?

Keystore 유지 보수에 대한 포인터와 키를 어떻게 단단히 저장합니까?

편집하다:

오픈 소스 여야합니다. 기본적으로 Rijndael을 사용한 데이터의 표준 암호화 / 해독 일뿐입니다.

도움이 되었습니까?

해결책

Java에는 상자에 AE가 포함되어 있습니다. Rijndael은 Aes입니다. 외부 라이브러리가 필요하지 않습니다. 당신은 다음과 같은 것이 필요합니다.

byte[] sessionKey = null; //Where you get this from is beyond the scope of this post
byte[] iv = null ; //Ditto
byte[] plaintext = null; //Whatever you want to encrypt/decrypt
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//You can use ENCRYPT_MODE or DECRYPT_MODE
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv));
byte[] ciphertext = cipher.doFinal(plaintext);

그리고 그것은 암호화/암호 해독을위한 것입니다. 다량의 데이터를 처리하는 경우 16 바이트의 배수 인 덩어리를 읽고 Dofinal 대신 업데이트를 호출하는 것이 좋습니다 (마지막 블록에서 Dofinal을 호출).

다른 팁

훌륭한 무료 도서관의 경우 적극 권장합니다 바운시 캐슬. 적극적으로 유지되고 고품질이 있으며 다양한 코드 예제가 있습니다. 참조 문서를 위해서는 일반에 더 의존해야합니다. JCE 문서.

FIPS 인증 요구 사항을 충족하는 데 사용하는 라이브러리를 말할 수 없습니다. 그러나 훨씬 저렴한 cryptoj에 대한 대안이 있습니다.

일반적으로 Rijndael과 같은 대칭 암호로 암호화 한 각 메시지에 대한 새로운 키를 생성 한 다음 RSA와 같은 비대칭 알고리즘으로 해당 키를 암호화하는 것이 좋습니다. 이 개인 키는 PKCS #12 또는 Java의 "JKS"와 같은 비밀번호로 보호 된 소프트웨어 기반 키 스토어에 저장 될 수 있습니다.

우리 회사가 최근 알게 된 바와 같이, AES는 Rijndael이 아닙니다. AES는 키가 128, 192 또는 256 비트 여야한다는 제한 사항이 있지만 Rijndael은 160과 224의 키를 허용합니다.

위의 Erickson이 표시 한 바와 같이, Bouncycastle은 추가 키 길이를 지원하는 Rijndael 객체를 제공합니다 : 128/160/192/224/256 비트. 구체적으로, 경량 API를 살펴보십시오.

GNU- 크립토는 또 다른 오픈 소스 라이브러리이지만 160 및 224 비트 키를 지원하지 않습니다.

따라서, 당신이 특별히 완전한 Rijndael 지원을 찾고 있다면, Bouncycastle은 지금까지 내가 찾은 유일한 것입니다.

javax.crypto는 AES 지원이 있습니다. http://java.sun.com/developer/technicalarticles/security/aes/aes_v1.html

보안 키 저장과 관련하여 일반적인 방법은 암호화 해시 함수를 사용하여 사용자 입력 (암호화)에서 암호화 키를 도출하고 파생 키를 사용하여 키 체인을 암호화하는 것입니다. 또는 하나의 키만 필요한 경우 파생 키 자체를 사용할 수 있습니다.

시스템의 보안은 사용 된 해시 기능의 강도와 직접 관련이 있음을 항상 명심하십시오. 가능한 경우 소금과 함께 암호화 적으로 안전한 해시 기능을 사용하고 한 번 이상 해시 (예 : 수백 번)를 사용하십시오.

즉, 질문은 매우 모호합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top