一个简单的3des对称加密对象
package com.bruce.geekway.utils; import java.net.URLEncoder; import java.security.MessageDigest; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class EncryptUtils { private static final String Algorithm = "DESede"; // 定义加密算法,可用,DES,DESede,Blowfish private static final String KEY = "jk#la$sf%jl9(ksd)gh-sd+sad=HyUWz"; /** * 3des解码 * * @param value * 待解密字符串 * @param key * 原始密钥字符串 * @return * @throws Exception */ public static String Decrypt3DES(String value, String key) throws Exception { byte[] b = decryptMode(GetKeyBytes(key), Base64.getDecoder().decode(value)); return new String(b); } /** * 3des解码 * * @param value * 待解密字符串 * @param key * 原始密钥字符串 * @return * @throws Exception */ public static String Decrypt3DES(String value) throws Exception { byte[] b = decryptMode(GetKeyBytes(KEY), Base64.getDecoder().decode(value)); return new String(b); } /** * 3des加密 * * @param value * 待加密字符串 * @param key * 原始密钥字符串 * @return * @throws Exception */ public static String Encrypt3DES(String value, String key) throws Exception { return byte2Base64(encryptMode(GetKeyBytes(key), value.getBytes())); } /** * 3des加密 * * @param value * 待加密字符串 * @param key * 原始密钥字符串 * @return * @throws Exception */ public static String Encrypt3DES(String value) throws Exception { return byte2Base64(encryptMode(GetKeyBytes(KEY), value.getBytes())); } /** * 计算24位长的密码byte值,首先对原始密钥做MD5算hash值,再用前8位数据对应补全后8位 * * @param strKey * 密钥 * @return * @throws Exception */ public static byte[] GetKeyBytes(String strKey) throws Exception { if (null == strKey || strKey.length() < 1) throw new Exception("key is null or empty!"); MessageDigest alg = MessageDigest.getInstance("MD5"); alg.update(strKey.getBytes()); byte[] bkey = alg.digest(); int start = bkey.length; byte[] bkey24 = new byte[24]; for (int i = 0; i < start; i++) { bkey24[i] = bkey[i]; } for (int i = start; i < 24; i++) {// 为了与.net16位key兼容 bkey24[i] = bkey[i - start]; } return bkey24; } /** * 加密 * * @param keybyte为加密密钥 * ,长度为24字节 * @param src * 为被加密的数据缓冲区(源) * @return */ public static byte[] encryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } /** * 解密 * * @param keybyte * 解密密钥,长度为24字节 * @param src * 解密后的缓冲区 * @return */ public static byte[] decryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 解密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } /** * 转换成base64编码 */ public static String byte2Base64(byte[] b) { return Base64.getEncoder().encodeToString(b); } /** * 转换成十六进制字符串 */ public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; if (n < b.length - 1) hs = hs + ":"; } return hs.toUpperCase(); } /** * 3DEC 加密解密测试 */ public static void main(String[] args) throws Exception { System.out.println(" key = " + KEY); String password = "tester-99888777-60"; String enStr = EncryptUtils.Encrypt3DES(password); System.out.println("调用原始密钥算加密结果:" + enStr); System.out.println("调用原始密钥算解密结果:" + EncryptUtils.Decrypt3DES(enStr)); System.out.println("在URL中需要做下编码" + URLEncoder.encode(enStr, "utf-8")); } }
相关推荐
3Des对称加密在JS实现,此处代码要与https://blog.csdn.net/yufang131/article/details/79869964文章一起看(只包含JS部分)。《三重Des对称加密在JS、Android、Ios 和Java 平台的实现(多加一个JS实现)》
基于java的开发源码-利用DES私钥对称加密代码实例.zip 基于java的开发源码-利用DES私钥对称加密代码实例.zip 基于java的开发源码-利用DES私钥对称加密代码实例.zip 基于java的开发源码-利用DES私钥对称加密代码实例....
C#实现3DES对称加密,vs2005编译通过。
RSA非对称加密和DES对称加密代码示例包含(commons-lang3-3.1 commons-codec-1.4.jar)
1、DES算法工作的基本原理:DES是基于Feistel密码结构的分组密码,其 入口参数有三个:key、data、mode。 其中,key为加密/解密时使用的 密钥;data为加密/解密的数据;mode为其工作模式:当模式为加密模 式时,...
DES对称加密 支持IOS,mac编译
Java利用DES私钥对称加密代码实例 Java利用DES私钥对称加密代码实例.zip
JAVA代码实现DES对称加密,同时加密后的数据为字符串类型,方便数据传输。
DES( Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。
DES对称加密算法 纯C代码 绝对优化算法 如假包换56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, ...
Java利用DES私钥对称加密代码实例.rar
DES对称加密 是一种很早有IBM实现的对称加密!
使用DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储.
C语言实现的DES对称加密算法,老师布置的实验作业,原创,花了不少时间才调试成功。
DES算法为密码体制中的对称密码体制,是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。 这里以Java代码实现DES算法。
Java利用DES私钥对称加密实例
C# des对称加密字符串实例C# des对称加密字符串实例
DES、AES对称加密算法,之前从网上找的,但是在MAC上运行发现每次加密出来的结果都不一样,后来查了一些博客,最后确认是SecureRandom的随机算法问题,需要设置setSeed.
PHP 3des 对称加密解密,与 java c#兼容
Java利用DES私钥对称加密代码实例