SecretKeyFactory.getInstance(“DESede”)
DESede 相比 DES ,多出的ede,正好是encrypt – decrypt -encrypt,使用3条56位的密钥对数据进行三次加密。
java示例:
1 /** 2 * 3 * @param key 秘钥 4 * @param text 需要加密的数据 5 * @return 6 * @throws Exception 7 * 简单了解下 : DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究, 8 * 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,较为容易破解。 9 */ 10 public static String encrypt(String key,String text) throws Exception { 11 try { 12 byte[] src = text.getBytes("utf-8"); 13 //DESedeKeySpec会帮你生成24位秘钥,key可以是任意长度 14 DESedeKeySpec spec = new DESedeKeySpec(key.getBytes("utf-8")); 15 SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); 16 SecretKey secretKey = factory.generateSecret(spec); 17 Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); 18 cipher.init(Cipher.ENCRYPT_MODE, secretKey); 19 byte[] res = cipher.doFinal(src); 20 //encodeBase64会对字符串3位一组自动补全,因而最后可能会出现 == 或者 = 21 return new String(Base64.encodeBase64(res), "utf-8"); 22 23 } catch (Exception e) { 24 System.out.println("error"); 25 } 26 return null; 27 }
new DESedeKeySpec(key.getBytes("utf-8"))
public DESedeKeySpec(byte[] var1, int var2) throws InvalidKeyException { if(var1.length - var2 < 24) { throw new InvalidKeyException("Wrong key size"); } else { this.key = new byte[24]; System.arraycopy(var1, var2, this.key, 0, 24); } }
目前主流加密手段大致可分为单向加密和双向加密:
单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原。算法代表:MD5,SHA
双向加密:与单向加密相反,可以把密文逆推还原成明文,双向加密又分为 对称加密和非对称加密。
对称加密:指数据使用者必须拥有相同的密钥才可以进行加密解密,就像彼此约定的一串暗号。算法代表:DES,3DES,AES,IDEA,RC4,RC5
非对称加密:相对对称加密而言,非对称加密需要公开密钥和私有密钥两组密钥,公开密钥和私有密钥是配对起来的,也就是说使用公开密钥进行数据加密,只有对应的私有密钥才能解密,只能使用该用户的加密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。这里把公开的密钥为公钥,不公开的密钥为私钥。算法代表:RSA,DSA
MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。