AES가 포함된 JAVA를 사용하여 OpenSSL 암호화 파일 암호 해독
UNIX에서는 다음 OpenSSL 명령을 사용하여 파일을 암호화할 수 있습니다.
openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc
이 파일을 JAVA에서 해독하려면 정확한 UNIX를 복제할 수 없습니다. 명령. 대신, 복호화에 대해 다르지만 기능적인 접근 방식을 따라야 합니다.
JAVA 구현
다음은 OpenSSL로 암호화된 파일을 복호화하는 방법을 보여주는 Java 코드 조각입니다. AES:
import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.security.GeneralSecurityException; import java.security.MessageDigest; import java.util.Arrays; import java.util.List; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.bouncycastle.util.encoders.Base64; public class OpenSSLDecryptor { private static final Charset ASCII = Charset.forName("ASCII"); private static final int INDEX_KEY = 0; private static final int INDEX_IV = 1; private static final int ITERATIONS = 1; private static final int ARG_INDEX_FILENAME = 0; private static final int ARG_INDEX_PASSWORD = 1; private static final int SALT_OFFSET = 8; private static final int SALT_SIZE = 8; private static final int CIPHERTEXT_OFFSET = SALT_OFFSET + SALT_SIZE; private static final int KEY_SIZE_BITS = 256; ... public static void main(String[] args) { ... // Parse command-line arguments File f = new File(args[ARG_INDEX_FILENAME]); // Read and decode base 64 encoded file String dataBase64 = new String(Files.readAllBytes(f.toPath()), ASCII); byte[] headerSaltAndCipherText = Base64.decode(dataBase64); ... // Decrypt the file using the provided password and encryption parameters byte[] decrypted = aesCBC.doFinal(encrypted); // Convert decrypted bytes to a string and print the result String answer = new String(decrypted, ASCII); System.out.println(answer); } }
이 코드는 EVP_BytesToKey 메서드를 활용하여 파생합니다. 주어진 비밀번호를 기반으로 하는 암호화 키 및 초기화 벡터(IV)입니다. 그런 다음 Cipher 클래스는 CBC 모드 및 PKCS5 패딩으로 AES 암호 해독을 수행하는 데 사용됩니다.
추가 참고 사항
위 내용은 AES를 사용하여 Java에서 OpenSSL 암호화 파일을 해독하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!