博客
关于我
java加密解密
阅读量:802 次
发布时间:2023-01-28

本文共 3482 字,大约阅读时间需要 11 分钟。

Base64编码与DES加密解密算法

Base64编码是网络上最常见的用于传输8位字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。其运算原理基于计算机是8位存储的特点,通过将24位字符分解为4组6位的字符进行处理,并为每组高位补0,转换成ascii码后根据RFC2045~RFC2049表进行转换。

Base64编码示例

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加密算法

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/

你可能感兴趣的文章
Node实现小爬虫
查看>>
Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
查看>>
Node提示:npm does not support Node.js v12.16.3
查看>>
Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
查看>>
Node服务在断开SSH后停止运行解决方案(创建守护进程)
查看>>
node模块化
查看>>
node环境下使用import引入外部文件出错
查看>>
node编译程序内存溢出
查看>>
Node读取并输出txt文件内容
查看>>
node防xss攻击插件
查看>>
noi 1996 登山
查看>>
noi 7827 质数的和与积
查看>>
NOI2010 海拔(平面图最大流)
查看>>
NOIp2005 过河
查看>>
NOIP2011T1 数字反转
查看>>
NOIP2014 提高组 Day2——寻找道路
查看>>
NOIp模拟赛二十九
查看>>
Nokia5233手机和我装的几个symbian V5手机软件
查看>>
Non-final field ‘code‘ in enum StateEnum‘
查看>>
none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
查看>>