本文共 3394 字,大约阅读时间需要 11 分钟。
Base64编码是网络上最常见的用于传输8位字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。其运算原理基于计算机是8位存储的特点,通过将24位字符分解为4组6位的字符进行处理,并为每组高位补0,转换成ascii码后根据RFC2045~RFC2049表进行转换。
public class Test { public static void main(String[] args) throws Exception { Test test = new Test(); test.testEncrypt(); test.testDecrypt(); } public void testEncrypt() throws Exception { String pwd = "123456"; byte[] i = pwd.getBytes(); String input = new BASE64Encoder().encodeBuffer(i); System.out.println(input); } public void testDecrypt() throws Exception { String pwd = "MTIzNDU2"; byte[] o = new BASE64Decoder().decodeBuffer(pwd); String output = new String(o); System.out.println(output); }}
123456的Base64编码为:MTIzNDU2解密后的结果为:123456
DES(Data Encryption Standard)是一种对称加密算法,加密和解密均使用相同密钥进行处理。
public class DESTest { public static void main(String[] args) { DESTest t = new DESTest(); String data = "123456"; String encode_data = t.encode(data); System.out.println(encode_data); String decode_data = t.decode(encode_data); System.out.println(decode_data); } public static final String ALGORITHM_DES = "DES"; public static final String SIGN_KEY = "20170313EHR"; public String encode(String data) { if (data == null) { return null; } try { String key = SIGN_KEY; DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] bytes = cipher.doFinal(data.getBytes()); return byte2str(bytes); } catch (Exception e) { e.printStackTrace(); return data; } } public String decode(String data) { if (data == null) { return null; } try { String key = SIGN_KEY; DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] bytes = cipher.doFinal(str2byte(data.getBytes())); return new String(bytes); } catch (Exception e) { e.printStackTrace(); return data; } } private static byte[] str2byte(byte[] b) { if ((b.length % 2) != 0) { throw new IllegalArgumentException(); } byte[] b2 = new byte[b.length / 2]; for (int n = 0; n < b.length; n += 2) { String item = new String(b, n, 2); b2[n / 2] = (byte) Integer.parseInt(item, 16); } return b2; } private static String byte2str(byte[] b) { StringBuilder hs = new StringBuilder(); for (int n = 0; n < b.length; n++) { String stmp = Integer.toHexString(b[n] & 0xFF); if (stmp.length() == 1) { hs.append('0'); } hs.append(stmp); } return hs.toString().toUpperCase(); }}
1730D210F056D4D8123456
123456
转载地址:http://ejryk.baihongyu.com/