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。
本文介绍如何在C#与Android平台之间实现DES加密解密的互操作性,包括不同填充模式下的实现细节。
208

被折叠的 条评论
为什么被折叠?



