2017-11-30 15 views
-1

이 내 자바 프로그램입니다? 안전한 websocket 채널을 설정하고 싶습니다. RSA 알고리즘을 사용해 보았습니다. 아쉽게도 128 바이트보다 큰 메시지 크기를 지원하지 않습니다.자바 디코드 AES 암호화 메시지 문제

나는 here의 예를 따른다. 그것은 자바 측에서 잘 작동하지만, 나는 자바 스크립트 측면에서 SealedObject를 보내는 법을 모르기 때문에 데드 엔드를 다시한다. 다음과 같은

Java 프로그램 출력 :

Key=hlnUjh4GM1PegSzl13YFQgI5+I1qcbsmqlBV8vDsVy0=| 
IV=ZkqiRuDS7YUrjZMLRr/gfQ==| 
Encrypted Text=HFROj40Qh9YagJAS+7saN2/ugqszCPpmjT9Qwy2yt9dCntSbpbYqTt/tW0ju5QO614+S9zQyOdBXFKtNdDew9Ouo9YkmRgRkjY7NNGyVbt+Z5CYCgcwpRmNUuH7Fqyat5H3hFSUi05UyLLA6lIa47wyP7jKsq0rtj1yHth8qN06aisB18s4Cf9YBPbUM72qXS+IcpKLMWEVVw7Q0qA91WRCt9y93SptNUme75D/qCKyym20UJ5f0ZCgijOnnsbWJKci1R179qZ8UthFBjqcZm88VmV1UuA7OsAvzxsyA7iVtwsf9u6UnrlOtoMTl41Q5nLod4unkdbomrXb6hDKhV9ThtCy1ZWPFHhKbEAPMdzUnmmBSwcuGSTKvdPJeHAWH| 
Decrypted text=abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 

포스트 here에 따르면, 크립토 JS 성공적 자바 출력을 디코딩 할 수있다.

그러나 Java 프로그램은 javascript 출력을 성공적으로 디코딩 할 수 없습니다. 여기

<script src="js/cryptojs/rollups/aes.js"></script> 
    <script src="js/cryptojs/components/mode-ctr-min.js"></script> 
    <script language=javascript> 
      .................. 
     var result; 
     var encoded=CryptoJS.AES.encrypt("hello", 
             keyArray, 
             { 
             iv: ivArray, 
             mode: CryptoJS.mode.CTR, 
             padding: CryptoJS.pad.Pkcs7 
             }); 

     result=encoded.ciphertext.toString(CryptoJS.enc.Base64); 
    </script> 

내 자바 프로그램 내 자바 스크립트 progarm입니다 :

byte iv[] = new byte[16]; 
    SecureRandom secRandom = new SecureRandom() ; 
    secRandom.nextBytes(iv);  
    Cipher decipher = Cipher.getInstance("AES/CTR/PKCS5PADDING"); 
    decipher.init(Cipher.DECRYPT_MODE, aesKey,new IvParameterSpec(iv)); 
    byte[] cipherTextInByteArr =Base64.getDecoder().decode(encodedText); 
    byte[] plainTextInByteArr = decipher.doFinal(cipherTextInByteArr);  
    String result=new String(plainTextInByteArr,"UTF-8"); 

그러나, 출력은 "안녕하세요 ???????". 문제가 있습니까?

+0

RSA는 전체 메시지를 암호화하는 데 사용되지 않습니다,하지만 대칭 일반적으로 다른 암호화 알고리즘에 대한 키 (암호화하기 :

<script src="js/cryptojs/rollups/aes.js"></script> <script src="js/cryptojs/components/mode-ctr-min.js"></script> <script language=javascript> .................. var result; var encoded=CryptoJS.AES.encrypt("hello", keyArray, { iv: ivArray, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding }); result=encoded.ciphertext.toString(CryptoJS.enc.Base64); </script> 

그리고 자바 프로그램처럼)를 사용하여 메시지를 암호화합니다. –

+0

자바를 사용하여 메시지를 인코딩 한 경우에도 실제로 자바에 관한 것입니다. 따라서 [tag : java] 태그는 여기에 적합하지 않습니다. –

+0

또한 책, 도구, 소프트웨어 라이브러리, 자습서 또는 기타 오프 사이트 리소스를 추천하거나 찾도록 요청하는 질문은 독단적 인 답변 및 스팸을 유치하는 경향이 있으므로 스택 오버플로에 대한 주제와 관련이 없습니다. 대신, [문제 설명] (http://meta.stackoverflow.com/questions/254393) 및 지금까지 해결 된 사항은 무엇입니까? –

답변

0

마지막으로 작동합니다. this post에 따르면 CTR 모드에는 패딩이 필요하지 않습니다. 따라서 같은 자바 스크립트 프로그램의 모양을

byte iv[] = new byte[16]; 
SecureRandom secRandom = new SecureRandom() ; 
secRandom.nextBytes(iv);  
Cipher decipher = Cipher.getInstance("AES/CTR/NoPadding"); 
decipher.init(Cipher.DECRYPT_MODE, aesKey,new IvParameterSpec(iv)); 
byte[] cipherTextInByteArr =Base64.getDecoder().decode(encodedText); 
byte[] plainTextInByteArr = decipher.doFinal(cipherTextInByteArr);  
String result=new String(plainTextInByteArr,"UTF-8");