이번에는 Java 3DES 암호화 및 복호화 사용 방법과 Java 3DES 암호화 및 복호화 사용 시 주의사항에 대해 설명하겠습니다. 다음은 실제 사례입니다.
<pre name="code" class="java">Java写的加密解密算法及调用范例 1、.JAVA算法范例 package Common.JUtility; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; public class EncryptUtils { /// <summary> /// 3des解码 /// </summary> /// <param name="value">待解密字符串</param> /// <param name="key">原始密钥字符串</param> /// <returns></returns> public static String Decrypt3DES(String value, String key) throws Exception { byte[] b = decryptMode(GetKeyBytes(key), Base64.decode(value)); return new String(b); } /// <summary> /// 3des加密 /// </summary> /// <param name="value">待加密字符串</param> /// <param name="strKey">原始密钥字符串</param> /// <returns></returns> public static String Encrypt3DES(String value, String key) throws Exception { String str = byte2Base64(encryptMode(GetKeyBytes(key), value.getBytes())); return str; } //计算24位长的密码byte值,首先对原始密钥做MD5算hash值,再用前8位数据对应补全后8位 public static byte[] GetKeyBytes(String strKey) throws Exception { if (null == strKey || strKey.length() < 1) throw new Exception("key is null or empty!"); java.security.MessageDigest alg = java.security.MessageDigest.getInstance("MD5"); alg.update(strKey.getBytes()); byte[] bkey = alg.digest(); System.out.println("md5key.length=" + bkey.length); System.out.println("md5key=" + byte2hex(bkey)); 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]; } System.out.println("byte24key.length=" + bkey24.length); System.out.println("byte24key=" + byte2hex(bkey24)); return bkey24; } private static final String Algorithm = "DESede"; //定义 加密算法,可用 DES,DESede,Blowfish //keybyte为加密密钥,长度为24字节 //src为被加密的数据缓冲区(源) 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; } //keybyte为加密密钥,长度为24字节 //src为加密后的缓冲区 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.encode(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(); } } 2、JAVA 算法调用范例 package test.com; import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; import Common.JUtility.EncryptUtils;//用原始密钥经MD5转换和补位后的新密钥来做3DES加密解密 public class Test3DES { public static void main(String[] args) { String key = "abcd1234"; String password = "password"; System.out.println("key=" + key + ",password=" + password); System.out.println(); System.out.println("----------示例开始:使用java写的算法加密解密-----------"); try { String encrypt = ""; String decrypt = ""; byte[] bkey = EncryptUtils.GetKeyBytes(key); encrypt = EncryptUtils.byte2Base64(EncryptUtils.encryptMode(bkey, password.getBytes())); System.out.println("用预转换密钥算加密结果=" + encrypt); System.out.println("加密后base64表示=" + EncryptUtils.byte2hex(Base64.decode(encrypt))); System.out.println("调用原始密钥算加密结果=" + EncryptUtils.Encrypt3DES(password, key)); try { decrypt = new String(EncryptUtils.decryptMode(bkey, Base64.decode(encrypt))); System.out.println("用预转换密钥算解密结果=" + decrypt); System.out.println("调用原始密钥算解密结果=" + EncryptUtils.Decrypt3DES(encrypt, key)); } catch (Exception ex) { System.out.println("Exception:" + ex.getMessage()); } } catch (Exception ex) { System.out.println("Exception:" + ex.getMessage()); } System.out.println("----------示例结束:使用java写的算法加密解密-----------"); } } 3、(7)的运算结果 key=abcd1234,password=password ----------示例开始:使用java写的算法加密解密----------- md5key.length=16 md5key=E1:9D:5C:D5:AF:03:78:DA:05:F6:3F:89:1C:74:67:AF byte24key.length=24 byte24key=E1:9D:5C:D5:AF:03:78:DA:05:F6:3F:89:1C:74:67:AF:E1:9D:5C:D5:AF:03:78:DA 用预转换密钥算加密结果=ftwPzxFH4WpzT4Orq8uSLQ== 加密后base64表示=7E:DC:0F:CF:11:47:E1:6A:73:4F:83:AB:AB:CB:92:2D md5key.length=16 md5key=E1:9D:5C:D5:AF:03:78:DA:05:F6:3F:89:1C:74:67:AF byte24key.length=24 byte24key=E1:9D:5C:D5:AF:03:78:DA:05:F6:3F:89:1C:74:67:AF:E1:9D:5C:D5:AF:03:78:DA 调用原始密钥算加密结果=ftwPzxFH4WpzT4Orq8uSLQ== 用预转换密钥算解密结果=password md5key.length=16 md5key=E1:9D:5C:D5:AF:03:78:DA:05:F6:3F:89:1C:74:67:AF byte24key.length=24 byte24key=E1:9D:5C:D5:AF:03:78:DA:05:F6:3F:89:1C:74:67:AF:E1:9D:5C:D5:AF:03:78:DA 调用原始密钥算解密结果=password ----------示例结束:使用java写的算法加密解密-----------
이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트Other 관련 기사를 주목하세요!
추천 도서:
모바일 WEB 개발 시 클릭, 터치, 탭 이벤트 사용에 대한 자세한 설명
위 내용은 Java 3DES 암호화 및 암호 해독을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!