Verschlüsselung in Flash, entschlüsseln in Java

giggei

Grünschnabel
Hallo zusammen,

habe ein Problem. Ich will in Flash einen String mit einem PublicKey (RSA) verschlüsseln (dazu benutze ich http://crypto.hurlant.com) um diesen dann in Java mit dem entsprechenden PrivateKey wieder zu entschlüsseln.

Actionscript:
Code:
private var N:String ="1173149368060...";
private var E:String = "65537";

var plain:String = "Das hier will ich verschlüsseln";
var rsa:RSAKey = RSAKey.parsePublicKey(N, E);

var src:ByteArray = Base64.decodeToByteArray(Base64.encode(plain));
var dst:ByteArray = new ByteArray;

rsa.encrypt(src, dst, src.length);

encrypt.text = Base64.encodeByteArray(dst);

wenn ich jetzt das was in encrypt.text (ist ein textfeld) steht in java wie folgt entschlüsseln will (der übersciht halber ohne try/catch):

Code:
static String mod     = "1173149.....";
static String expPri  = "6783240330...";
final RSAPrivateKeySpec rsaPrivateKeyspec = new RSAPrivateKeySpec(new BigInteger(mod), new BigInteger(expPri));
PrivateKey privateKey = null;
privateKey = rsaFactory.generatePrivate(rsaPrivateKeyspec);

Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
rsaCipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] cleartext = rsaCipher.doFinal((new BASE64Decoder()).decodeBuffer("String aus flash"));
String decrypted = new String(cleartext);

liefert Java immer:

Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 128 bytes

Woran kann das liegen? jemand ideen?

gruss
giggs
 
Hallo,

hat sich erledigt, wenn man AS3 die Zahlen für den Key in hex-format gibt klappt es.

Code:
var N:String="a70fe03e28ec39.....";
var E:String = "10001";
var D:String = "6098b76a79b30d3e13159....";

hier der komplette funktionstüchtige Code (vielleicht kanns ja mal jemand brauchen)

AS3:
Code:
var N:String="a70fe03e28ec39.....";
var E:String = "10001";
var D:String = "6098b76a79b30d3e13159.....";

var plain:String = "Ich soll verschlüsselt werden";

var rsa_pub:RSAKey = RSAKey.parsePublicKey(N, E);
				
var src:ByteArray = Base64.decodeToByteArray(Base64.encode(plain));
var dst:ByteArray = new ByteArray;
rsa_pub.encrypt(src, dst, src.length);

var encrypted:String  = Base64.encodeByteArray(dst);

diesen string kann ich in java nun entschlüsseln:

Code:
static String mod     = "11731493680608...";
static String expPub  = "10001";
static String expPri  = "67832403...";


final RSAPrivateKeySpec rsaPrivateKeyspec = new RSAPrivateKeySpec(new BigInteger(mod), new BigInteger(expPri));
PrivateKey privateKey = rsaFactory.generatePrivate(rsaPrivateKeyspec);

Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
rsaCipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] cleartext = rsaCipher.doFinal((new BASE64Decoder()).decodeBuffer(encrypted));
String plain = new String(cleartext);

Anm: wenn die byteArray-länge 128 übersteigt muss man in java splitten und die blöcke einzeln entschlüsseln

gruss giggs
 

Neue Beiträge

Zurück