C#とJavaを使用して同じデータを暗号化しようとしています。データが7バイトを超える場合、JavaとC#の暗号化された値は同一ではありません。
入力1:Java
出力:FrOzOp / 2Io8 =
C#出力:FrOzOp / 2Io8 =入力2:abc
j:H9A / ahl8K7I =
c#:H9A / ahl8K7I =入力3:aaaaaaaa (問題)
j:Gxl7e0aWPd7j6l7uIEuMxA ==
c#:Gxl7e0aWPd7sf1xR6hK4VQ ==
これがC#とJavaメソッドの実装です。
C#コード:
public String saltTxt = "12345678";
public String Encrypt(String txt)
{
byte[] data = Encrypt(Encoding.UTF8.GetBytes(txt));
DESCryptoServiceProvider alg = new DESCryptoServiceProvider();
alg.Key = Encoding.UTF8.GetBytes(saltTxt.ToCharArray(), 0, cprovider.KeySize / 8);
alg.IV = new byte[8];
MemoryStream ms = new MemoryStream();
CryptoStream stem = new CryptoStream( ms, cprovider.CreateEncryptor(),CryptoStreamMode.Write);
stem.Write(txt, 0, txt.Length);
stem.FlushFinalBlock();
data = ms.ToArray();
return Convert.ToBase64String(data);
}
Javaコード:
public String saltTxt = "12345678";
public String Encrypt(String str) {
try {
KeySpec myKey = new DESKeySpec(saltTxt.getBytes("UTF8"));
SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(myKey);
Cipher ecipher = Cipher.getInstance("DES");
ecipher.init(Cipher.ENCRYPT_MODE, key);
byte[] data = str.getBytes("UTF8");
byte[] crypt = ecipher.doFinal(data);
return new BASE64Encoder().encode(crypt);
} catch (Exception ex) {
}
return null;
}
なぜそれが期待どおりに機能しないのか、何か考えはありますか?