Das ist mein Java-Programm:Java dekodieren AES verschlüsselte Nachricht Ausgabe
package com.util;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
public class Coder1 {
public static int AES_KEY_SIZE = 256 ;
public static int IV_SIZE = 16 ;
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException
{
String message = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
message =message +message;
message =message +message;
KeyGenerator keygen = KeyGenerator.getInstance("AES") ; // Specifying algorithm key will be used for
keygen.init(AES_KEY_SIZE) ; // Specifying Key size to be used, Note: This would need JCE Unlimited Strength to be installed explicitly
SecretKey aesKey = keygen.generateKey();
// Generating IV
byte iv[] = new byte[IV_SIZE];
SecureRandom secRandom = new SecureRandom() ;
secRandom.nextBytes(iv);
Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5PADDING");
Cipher decipher = Cipher.getInstance("AES/CTR/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, aesKey,new IvParameterSpec(iv));
decipher.init(Cipher.DECRYPT_MODE, aesKey,new IvParameterSpec(iv));
byte[] cipherTextInByteArr = cipher.doFinal(message.getBytes());
byte[] plainTextInByteArr = decipher.doFinal(cipherTextInByteArr);
System.out.println("Key="+Base64.getEncoder().encodeToString(aesKey.getEncoded())+"|");
System.out.println("IV="+Base64.getEncoder().encodeToString(iv)+"|");
System.out.println("Encrypted Text=" + Base64.getEncoder().encodeToString(cipherTextInByteArr)+"|") ;
System.out.println("Decrypted text=" + new String(plainTextInByteArr));
}
}
Um die Ausgabe des obigen Java-Programm zu entschlüsseln, die JavaScript-Bibliothek sollte ich verwenden? Ich möchte einen sicheren Websocket-Kanal einrichten. Ich habe versucht, RSA-Algorithmus zu verwenden. Leider unterstützt es nicht die Nachrichtengröße größer als 128 Byte.
Ich folge dem Beispiel in here. Es funktioniert gut in Java-Seite, aber ich weiß nicht, wie SealedObject zu Javascript-Seite, daher, Sackgasse wieder zu senden.
Die Java-Programm Ausgabe wie folgt:
Key=hlnUjh4GM1PegSzl13YFQgI5+I1qcbsmqlBV8vDsVy0=|
IV=ZkqiRuDS7YUrjZMLRr/gfQ==|
Encrypted Text=HFROj40Qh9YagJAS+7saN2/ugqszCPpmjT9Qwy2yt9dCntSbpbYqTt/tW0ju5QO614+S9zQyOdBXFKtNdDew9Ouo9YkmRgRkjY7NNGyVbt+Z5CYCgcwpRmNUuH7Fqyat5H3hFSUi05UyLLA6lIa47wyP7jKsq0rtj1yHth8qN06aisB18s4Cf9YBPbUM72qXS+IcpKLMWEVVw7Q0qA91WRCt9y93SptNUme75D/qCKyym20UJ5f0ZCgijOnnsbWJKci1R179qZ8UthFBjqcZm88VmV1UuA7OsAvzxsyA7iVtwsf9u6UnrlOtoMTl41Q5nLod4unkdbomrXb6hDKhV9ThtCy1ZWPFHhKbEAPMdzUnmmBSwcuGSTKvdPJeHAWH|
Decrypted text=abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
nach der Post here, die Crypto-JS kann die Java-Ausgabe erfolgreich dekodieren.
Allerdings kann das Java-Programm die Javascript-Ausgabe nicht erfolgreich dekodieren. Hier ist mein Javascript progarm
<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>
Mein Java-Programm:
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");
jedoch der Ausgang "Hallo ???????". Ist etwas nicht in Ordnung?
RSA nicht verwendet wird, eine ganze Nachricht zu verschlüsseln, aber einen Schlüssel für einen anderen Verschlüsselungsalgorithmus (in der Regel symmetrisch zu verschlüsseln), die zum Verschlüsseln der Nachricht verwendet wird. –
Obwohl Sie möglicherweise Java verwenden, um die Nachricht zu verschlüsseln, stellen Sie in Wirklichkeit JavaScript in Frage. Daher ist das Tag [tag: java] hier nicht geeignet. –
Auch Fragen, die uns bitten, ein Buch, ein Tool, eine Softwarebibliothek, ein Tutorial oder eine andere Offsite-Ressource zu empfehlen oder zu finden, sind für Stack Overflow off-topic, da sie dazu neigen, Meinungen und Spam anzusprechen. Stattdessen [beschreibe das Problem] (http://meta.stackoverflow.com/questions/254393) und was bisher getan wurde, um es zu lösen. –