.net加密
/// <summary>
/// 3DES 加密
/// </summary>
/// <param name="input"></param>
/// <param name="key">密钥(长度24字符)</param>
/// <param name="coding">Encoding 编码格式</param>
/// <returns></returns>
public static string Des3Encrypt(this string input, string key, Encoding coding = null)
{
try
{
if (coding == null)
{
coding = Encoding.UTF8;
}
var data = coding.GetBytes(input);
var des = new TripleDESCryptoServiceProvider
{
Key = coding.GetBytes(key),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
var cryp = des.CreateEncryptor();
return Convert.ToBase64String(cryp.TransformFinalBlock(data, 0, data.Length));
}
catch
{
return null;
}
}
android 解密
/**
* ECB解密,不要IV
*
* @param key
* 密钥
* @param data
* Base64编码的密文
* @return 明文
* @throws Exception
*/
public static byte[] ees3DecodeECB(byte[] key, byte[] data)
throws Exception {
Key deskey = null;
DESedeKeySpec spec = new DESedeKeySpec(key);//用这个DESKeySpec s = new DESKeySpec(key.getBytes())获取失败 不知道原因
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede" + "/ECB/PKCS7Padding"); cipher.init(Cipher.DECRYPT_MODE, deskey); byte[] bOut = cipher.doFinal(data); return bOut;}
方法调用
byte[] bytes = Base64.decode(src);// 这个base64用的是org.common.util的base64.
String aa =new String(Des3Decrypt(src,key));
还有一种 我没有用到的cbc
- public static String decryptDES(String decryptString, String decryptKey) throws Exception {
- byte[] byteMi = new Base64().decode(decryptString);
- IvParameterSpec zeroIv = new IvParameterSpec(iv);
-
- SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES");
- Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
- cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
- byte decryptedData[] = cipher.doFinal(byteMi);
-
- return new String(decryptedData);
- }