バイバブDikha:
私は、下記のJava機能により暗号化されたバイト配列のために待機しているサーバーを設定しています。AESは暗号化され、それが簡単に同じJava機能を使用していましたが、私は、入力として文字列を受け取り、その関数のダーツ同等(フラッター)であるかを把握することができませんし、返しますので、以前の私は私のアプリを構築するためにJavaを(アンドロイド)使用していました私は、TCPソケットに書き込むことができる出力としてバイト配列。
また、私は本当にサーバーに生成されたバイト配列を書き込み、その後、同様の応答を読み取る方法を知り、ダーツを通してそれを解読する上で助けに感謝したい(フラッター)
私は単純な文字列を書き込み、ダーツを通じてTCPサーバへの入力と出力のような単純な文字列を受け取ることに成功しているが、暗号化されたバイト配列のための同じを傾けます。Javaでは、私はこのようなサーバへの応答を送信するためにDataOutputStreamをを使用しました
DataOutputStream dOut = newDataOutputStream(socket.getOutputStream());
byte[] s2 = Encrypt3.encrypt2(myString);
dOut.writeInt(s2.length); // write length of the message
dOut.write(s2);
ここで私は、AES暗号化に使用されるJavaの機能があります
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class Encrypt3 {
public static String key = "mykey";
public static byte[] encrypt2(String text ){
String encrypt ="";
try{
// Create key and cipher
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
// encrypt the text
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
return encrypted ;
}catch(Exception e){
System.out.println(e);
}
return null ;
}
public static String decrypt2(byte[] encrypted2){
String decrypt ="";
try{
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
// decrypt the text
cipher.init(Cipher.DECRYPT_MODE, aesKey);
decrypt = new String(cipher.doFinal(encrypted2));
}catch(Exception e){
System.out.println(e);
}
return decrypt ;
}
}
私は、入力として文字列を提供する場合と同等のByteArrayは、ダーツで生産されることを期待して、TCPサーバーにバイト配列を書き込むこと。
前もって感謝します
リチャード・ヒープ:
あなたが本当の暗号システムでは使用しないでください電子コードブック(ECB)モードへのJava暗号のデフォルト値を設定する方法。また、デフォルトのパディングに依存している - PKCS5。
使用しpointcastle
、以下の輸入品で、パッケージを:
import 'package:pointycastle/api.dart';
import 'package:pointycastle/block/aes_fast.dart';
import 'package:pointycastle/paddings/pkcs7.dart';
import 'package:pointycastle/padded_block_cipher/padded_block_cipher_impl.dart';
import 'package:pointycastle/block/modes/ecb.dart';
ダートでのおおよそ同等です:
List<int> encrypt2(String text) {
// key must be 16 or 32 bytes - not sure how "mykey" could work
// key should really be binary, not a String! Better to use a KDF.
Uint8List key = Uint8List.fromList(
utf8.encode('0123456789abcdef'),
);
PaddedBlockCipher cipher = PaddedBlockCipherImpl(
PKCS7Padding(), // Java defaults to PKCS5 which is equivalent
ECBBlockCipher(AESFastEngine()), // Very weak mode - don't use this in the real world
);
cipher.init(
true,
PaddedBlockCipherParameters<CipherParameters, CipherParameters>(
KeyParameter(key),
null,
),
);
return cipher.process(utf8.encode(text)); // this isn't the same as .toBytes, except for ASCII
}