C#进行加密,Android进行解密。或者,Android进行加密,C#进行解密。
C#加密:
/// C# DES加密
/// </summary>
/// <param name="originalValue"></param>
/// <param name="key">key长度必须为8位的倍数</param>
/// <returns></returns>
public string DESEncrypt(string originalValue, string key)
{
DESCryptoServiceProvider sa = new DESCryptoServiceProvider();
sa.Key = Encoding.ASCII.GetBytes(key);
sa.Mode = CipherMode.ECB;
//sa.Padding = PaddingMode.None;
//sa.Padding = PaddingMode.Zeros;
sa.Padding = PaddingMode.PKCS7;
byte[] bysData = Encoding.UTF8.GetBytes(originalValue);
byte[] bysEncrypted = sa.CreateEncryptor().TransformFinalBlock(bysData, 0, bysData.Length);
return Convert.ToBase64String(bysEncrypted);
}
C#解密:
/// C# DES解密
/// </summary>
/// <param name="encryptedValue"></param>
/// <param name="key">key长度必须为8位的倍数</param>
/// <returns></returns>
public string DESDecrypt(string encryptedValue, string key)
{
SymmetricAlgorithm sa;
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
sa = new DESCryptoServiceProvider();
sa.Key = Encoding.ASCII.GetBytes(key);
sa.Mode = CipherMode.ECB;
//sa.Padding = PaddingMode.None;
//sa.Padding = PaddingMode.Zeros;
sa.Padding = PaddingMode.PKCS7;
ct = sa.CreateDecryptor();
byt = Convert.FromBase64String(encryptedValue);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
Android解密:
public String desDecrypt(String str, String key)
{
try
{
byte[] bysDecoded = Base64.decode(str, Base64.DEFAULT);
DESKeySpec objDesKeySpec = new DESKeySpec(key.getBytes("ASCII"));
SecretKeyFactory objKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey objSecretKey = objKeyFactory.generateSecret(objDesKeySpec);
//Cipher objCipher = Cipher.getInstance("DES/ECB/NoPadding");
Cipher objCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
objCipher.init(Cipher.DECRYPT_MODE, objSecretKey);
String strDecrypted = new String(objCipher.doFinal(bysDecoded), "utf-8").trim();
return strDecrypted;
}
catch (Exception e)
{
e.printStackTrace(System.out);
return "";
}
}
Android加密:
public String desDecrypt(String str, String key)
{
try
{
byte[] bysDecoded = Base64.decode(str, Base64.DEFAULT);
DESKeySpec objDesKeySpec = new DESKeySpec(key.getBytes("ASCII"));
SecretKeyFactory objKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey objSecretKey = objKeyFactory.generateSecret(objDesKeySpec);
//Cipher objCipher = Cipher.getInstance("DES/ECB/NoPadding");
Cipher objCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
objCipher.init(Cipher.DECRYPT_MODE, objSecretKey);
String strDecrypted = new String(objCipher.doFinal(bysDecoded), "utf-8").trim();
return strDecrypted;
}
catch (Exception e)
{
e.printStackTrace(System.out);
return "";
}
}
如果C#使用的是PaddingMode.None或者PaddingMode.Zeros,那么Android对应的就是DES/ECB/NoPadding。