相关工具
C#
using System; using System.Security.Cryptography; using System.Text; using System.IO; public class de { public class DE { private string keyStr = "12345678123456781234567812345678"; private string ivStr = "12345678123456781234567812345678"; public DE() { CreateDES(keyStr, ivStr); } SymmetricAlgorithm des; private void CreateDES(string keyStr, string ivStr) { byte[] key = new byte[16]; byte[] iv = new byte[16]; byte[] bytes = Encoding.UTF8.GetBytes(keyStr); for(int i = 0; i < key.Length; i ++) { key[i] = i < bytes.Length ? bytes[i] : (byte)0; } bytes = Encoding.UTF8.GetBytes(ivStr); for(int i = 0; i < iv.Length; i ++) { iv[i] = i < bytes.Length ? bytes[i] : (byte)0; } //分组加密算法 des = Rijndael.Create(); //设置密钥及密钥向量 des.Key = key; des.IV = iv; } public byte[] encrypt(byte[] src) { using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(src, 0, src.Length); cs.FlushFinalBlock(); byte[] cipherBytes = ms.ToArray();//得到加密后的字节数组 cs.Close(); ms.Close(); return cipherBytes; } } } public byte[] decrypt(byte[] src) { return decrypt(src, 0, src.Length); } public byte[] decrypt(byte[] src, int offest, int length) { byte[] decryptBytes = new byte[src.Length]; using (MemoryStream ms = new MemoryStream()) { ms.Write(src, offest, length); ms.Position = 0; using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read)) { cs.Read(decryptBytes, 0, decryptBytes.Length); cs.Close(); ms.Close(); } } return decryptBytes; } } }
java
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class ProtocolAES { private static ProtocolAES _instanceLogin; public static ProtocolAES getInstanceLogin() { if(_instanceLogin == null) { _instanceLogin = new ProtocolAES(); try { _instanceLogin.init(); } catch (Exception e) { e.printStackTrace(); } } return _instanceLogin; } private static ProtocolAES _instance; public static ProtocolAES getInstance() { if(_instance == null) { _instance = new ProtocolAES(); try { _instance.keyStr = "12345678123456781234567812345678"; _instance.init(); } catch (Exception e) { e.printStackTrace(); } } return _instance; } public String keyStr = "12345678123456781234567812345678"; public String ivStr = "12345678123456781234567812345678"; private Cipher encryptCipher; private Cipher decryptCipher; public void init() throws Exception { byte[] key = new byte[16]; byte[] bytes = keyStr.getBytes("utf-8"); for(int i = 0; i < key.length; i ++) { key[i] = i < bytes.length ? bytes[i] : (byte)0; } System.out.println("keyStr=" + keyStr); System.out.println("keyStr.length=" + keyStr.length()); System.out.println("key.length=" + key.length); byte[] iv = new byte[16]; bytes = ivStr.getBytes("utf-8"); for(int i = 0; i < iv.length; i ++) { iv[i] = i < bytes.length ? bytes[i] : (byte)0; } System.out.println("ivStr.length=" + ivStr.length()); System.out.println("iv.length=" + iv.length); SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); IvParameterSpec _iv = new IvParameterSpec(iv);// 使用CBC模式,需要一个向量iv,可增加加密算法的强度 encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式" encryptCipher.init(Cipher.ENCRYPT_MODE, skeySpec, _iv); decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); decryptCipher.init(Cipher.DECRYPT_MODE, skeySpec, _iv); } public byte[] encrypt(byte[] src) throws Exception { return encryptCipher.doFinal(src); } public byte[] decrypt(byte[] src) throws Exception { return decryptCipher.doFinal(src); } }