Android开发-----与C#服务器的DES加密
Android端
加密
/**
* 加密
*
* @param key 密钥, key的长度不能够小于8位字节
* @param data 原文
* @return 密文
*/
public static String encode(String key, byte[] data) throws Exception {
try {
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] bytes = cipher.doFinal(data);
return Base64.encodeToString(bytes, 3);
} catch (Exception e) {
throw new Exception(e);
}
}`
解密
/**
* 解密
*
* @param key 密钥, key的长度不能够小于8位字节
* @param data 密文
* @return 明文
*/
public static byte[] decode(String key, byte[] data) throws Exception {
try {
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(data);
} catch (Exception e) {
throw new Exception(e);
}
}
`
C#端
加密:
/// <summary> /// 加密字符串
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <param name="key">秘钥</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt_ECB(string str, string myKey)
{
string encryptKeyall = Convert.ToString(myKey); //定义密钥
if (encryptKeyall.Length < 9)
{
for (; ; )
{
if (encryptKeyall.Length < 9)
encryptKeyall += encryptKeyall;
else
break;
}
}
string encryptKey = encryptKeyall.Substring(0, 8);
DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();
byte[] key = Encoding.UTF8.GetBytes(encryptKey); //定义字节数组,用来存储密钥
byte[] data = Encoding.UTF8.GetBytes(str);//定义字节数组,用来存储要加密的字符串
descsp.Key = key;
descsp.Mode = CipherMode.ECB;
descsp.Padding = PaddingMode.PKCS7;
MemoryStream MStream = new MemoryStream(); //实例化内存流对象
//使用内存流实例化加密流对象
CryptoStream CStream = new CryptoStream(MStream, descsp.CreateEncryptor(key, key), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length); //向加密流中写入数据
CStream.FlushFinalBlock(); //释放加密流
return Convert.ToBase64String(MStream.ToArray());//返回加密后的字符串
}
`
解密
/// <summary>
/// ECB解密
/// </summary>
/// <param name="data">解密字符串</param>
/// <param name="key">秘钥</param>
/// <param name="iv">ECB模式不需要IV</param>
/// <returns></returns>
public static string DESDecrypst(string data, string key, string iv)
{
string encryptKeyall = Convert.ToString(key); //定义密钥
if (encryptKeyall.Length < 9)
{
for (; ; )
{
if (encryptKeyall.Length < 9)
encryptKeyall += encryptKeyall;
else
break;
}
}
string encryptKey = encryptKeyall.Substring(0, 8);
DESCryptoServiceProvider mCSP = new DESCryptoServiceProvider();
mCSP.Key = Encoding.UTF8.GetBytes(encryptKey);
// mCSP.IV = Encoding.UTF8.GetBytes(iv);
mCSP.Mode = CipherMode.ECB;
mCSP.Padding = PaddingMode.PKCS7;
ICryptoTransform iCrypto;
MemoryStream memory;
CryptoStream crypto;
byte[] byt;
iCrypto = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(data);
memory = new MemoryStream();
crypto = new CryptoStream(memory, iCrypto, CryptoStreamMode.Write);
crypto.Write(byt, 0, byt.Length);
crypto.FlushFinalBlock();
crypto.Close();
return Encoding.UTF8.GetString(memory.ToArray());
}
`