Android和C#之间的encryption

我正在使用以下C#源代码使用AES(ECB 256)encryption纯文本:

public static string Encode(string PlainText) { byte[] Key = ASCIIEncoding.UTF8.GetBytes("12345678901234567890123456789012"); string encrypted = null; RijndaelManaged rj = new RijndaelManaged(); rj.BlockSize = 256; rj.KeySize = 256; rj.Key = Key; rj.GenerateIV(); byte[] IV = rj.IV; rj.Mode = CipherMode.ECB; rj.Padding = PaddingMode.Zeros; try { using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, rj.CreateEncryptor(Key, IV), CryptoStreamMode.Write)) { using (StreamWriter sw = new StreamWriter(cs)) { sw.Write(PlainText); sw.Close(); sw.Dispose(); } cs.Close(); cs.Dispose(); } byte[] encryptArray = ms.ToArray(); encrypted = (Convert.ToBase64String(encryptArray)); ms.Close(); ms.Dispose(); } } catch (Exception ex) { throw ex; } finally { rj.Clear(); } return encrypted; } 

我需要通过相同的algorithm解密/encryption数据,但我不知道如何。

在这里,我的Java类( 不工作 ):

  public static String encrypt(byte[] key, String cleartext, boolean base64) throws Exception { byte[] rawKey = key; byte[] result = encrypt(rawKey, cleartext.getBytes()); // Base 64 if (base64) return toBase64(result); // Hex return toHex(result); } public static String decrypt(byte[] key, String encrypted) throws Exception { byte[] rawKey = key; byte[] enc = toByte(encrypted); byte[] result = decrypt(rawKey, enc); return new String(result); } private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(clear); return encrypted; } 

Java调用:

 encrypt("12345678901234567890123456789012".getBytes(), "Example Message", true); 

我不知道如何在Java中select块大小或PaddingMode.Zeros

任何想法?

提前致谢

Solutions Collecting From Web of "Android和C#之间的encryption"

是的,这个问题是AES中128位块大小的限制(参见“ Strong Versus Unlimited Strength Cryptography ”)。

最后,我已经使用GNU Crypto ,它的工作原理! 我导入了所有的源代码,并删除了我没有使用的代码。

如果有人想要清理源代码,他只需要问我。

谢谢您的帮助。

您还应该考虑Bouncy Castle,它既适用于C#也适用于Java

http://www.bouncycastle.org

阅读本文,似乎您可能需要使用允许无限强度encryption的Java版本,以便您可以使用大型密钥(AES-192和AES-256)。 由于某些国家实施的importpipe制限制,他们有意限制可以默认使用的钥匙长度。 有关更多信息,请参阅“强对抗强度密码学”部分。