당신이 공개 키로 암호화하고 개인 키로 해독하지만, 예를 들어 주셔서 감사합니다. 난 당신이 주위에 다른 잘못된 방법을하고 있다고 생각합니다. 플랫폼에 따라 공개-개인 키 쌍을 생성하는 방법에는 여러 가지가 있습니다. 이 예제에서는 Java를 사용하여 쌍을 만듭니다. 이 예제에서 사용할 암호화 알고리즘은 RSA입니다. 데이터를 암호화하는 데 필요한 키가 공개되는 비대칭 암호화 개념을 도입했지만, 데이터를 해독하는 데 필요한 해당 키는 클라이언트가 연결하는 서버의 파일과 같은 비공개로 유지됩니다. 이러한 시스템은 원칙적으로 보안 연결을 열 때 서버에 임시 암호화 키를 안전하게 보내는 방법의 문제를 해결합니다*. 매우 일반적인 비대칭 암호화 시스템은 RSA입니다, 발명가 리베스트의 이름을 따서 명명, 샤미르와 Adleman. 안녕 나는 봄을 사용하여 자바 동적 웹 응용 프로그램을 개발하고 있어요 나는 내 웹 콘텐츠 폴더에 keypair 폴더를 추가 프로젝트에서 암호화를 사용하고 싶었지만 프로젝트를 실행할 때 그것은 누군가가 나를 도울 수 있습니다 이러한 파일 예외를 제공하지 않습니다 우리의 예에서 하시기 바랍니다 , 우리는 두 개의 파일로 끝납니다 : public.key, 이는 아웃 클라이언트와 함께 배포됩니다 (항아리에 포장 될 수 있습니다, 또는 무엇이든); 한편, private.key는 우리의 서버에 비밀로 유지됩니다. 물론 키를 파일에 저장하는 것은 귀찮게 할 필요가 없습니다 : 그들은 단지 숫자일 뿐이며 코드에 상수 문자열로 포함 한 다음 해당 문자열을 BigInteger의 생성자에 전달할 수 있습니다.
파일에 키를 저장하면 경우에 따라 키를 관리하기가 조금 더 쉬워집니다(예: 주기적으로 키를 변경하고 클라이언트에 새 키 파일을 배포할 수 있습니다. 몇 바이트를 배포하는 것이 전체 코드 베이스를 배포하는 것보다 더 실용적입니다). 따라서 공개 키를 사용하면 개인 키로 해독 할 수있는 메시지를 암호화 할 수 있습니다. 이론적으로는 역방향(개인 키로 암호화하고 public으로 암호 해독)을 수행할 수 있지만 이것은 전혀 안전하지 않으며 대부분의 라이브러리(java.security 포함)는 허용되지 않습니다. HTTPS를 통해 서버에 연결할 때 보안 계층(SSL)은 이 메커니즘을 사용하여 연결을 보호합니다. 그러나 RSA를 사용하여 데이터를 직접 암호화하지는 않습니다. RSA는 다소 느린 알고리즘입니다. 대신 RSA는 대칭 키(예: AES)를 교환한 다음 데이터를 암호화하는 데 사용됩니다. 다음 예제에서는 이러한 키의 공유를 쉽게 하기 위해 공개 및 개인 키를 인코딩하는 Base64가 됩니다. 이를 위해 Java 8 제공 Base64를 사용할 예정입니다. 그것은 우리의 암호화 / 암호 해독 기능과 매우 유사합니다.
SHA256withRSA 형식의 서명을 얻고, 개인 키로 초기화하고, 메시지의 모든 바이트로 업데이트한 다음(예: 대용량 파일로 청크에서 이 작업을 수행할 수 있음) .sign() 메서드를 사용하여 서명을 생성합니다. 그런 다음 이 서명은 Base64 인코딩된 문자열로 반환됩니다. 여기에 표시된 예제는 base64 인코딩 된 공개 키를 생성하는 데 사용할 수 있으며 동일한 키는 자바 스크립트 또는 Android 클라이언트와 공유하여 서버에 도달하기 위해 와이어를 통해 이동해야하는 모든 요청을 암호화 할 수 있으며 서버는 privat를 사용하여 암호를 해독 할 수 있습니다. 전자 키. 이 예제에서는 파일에서 공개 및 개인 키를 로드한 다음 문자열 및 파일을 암호화하고 해독하는 데 사용할 수 있는 클래스를 만듭니다. 이 예제를 실행하려면 위의 코드를 실행하여 키를 생성하거나 아래 소스를 다운로드해야 합니다. 이 문서에서는 RSA (Rivest-Shamir-Adleman) 암호화 암호화 및 자바의 암호 해독에 대해 설명합니다. 우리는 KeyPairGenerator를 사용하여 공개 및 개인 키를 생성하고 비대칭 암호화 및 암호 해독을 위해 이러한 키를 사용합니다.