des加密,url编码,url解码,des解密 DES加解密及Wrong key size错误处理
des加密,url编码,url解码,des解密 DES加解密及Wrong key size错误处理
package com.example.core.mydemo.des; import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.SecureRandom; /**
原始字符串 = {"phone":"1391111","username":"张三"}
des加密 = 6bdoWaZe5426HaBBl2WdWDVm0iCy84Sl+O2lPiUvveozAnV1Scn6Tw==
url编码 = 6bdoWaZe5426HaBBl2WdWDVm0iCy84Sl%2BO2lPiUvveozAnV1Scn6Tw%3D%3D
url解码 = 6bdoWaZe5426HaBBl2WdWDVm0iCy84Sl%2BO2lPiUvveozAnV1Scn6Tw%3D%3D
des解密 = {"phone":"1391111","username":"张三"}
*/
public class DesUtls {
private static String CHARSETNAME="UTF-8"; /**
* DES加解密及Wrong key size错误处理
* @param key
* @return
* @throws UnsupportedEncodingException
*/
private static byte[] getKeyBytes(String key) throws UnsupportedEncodingException {
byte[] keyBytes = key.getBytes(CHARSETNAME);
if (keyBytes.length < 8) {
byte[] bytes = new byte[8];
System.arraycopy(keyBytes, 0, bytes, 0, keyBytes.length);
keyBytes = bytes;
}
return keyBytes;
} public static String getDESStr(String str, String encryptKey, String type, String charset) throws Exception {
SecureRandom random = new SecureRandom();
// DESKeySpec desKey = new DESKeySpec(encryptKey.getBytes());
DESKeySpec desKey = new DESKeySpec(getKeyBytes(encryptKey));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(desKey);
Cipher cipher = Cipher.getInstance("DES"); //加密
if ("ENCRYPT".equals(type)) {
//警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除
// BASE64Encoder base64encoder = new BASE64Encoder();
cipher.init(1, securekey, random);
// return base64encoder.encode(cipher.doFinal(str.getBytes(charset)));
return Base64Encoder.encode(cipher.doFinal(str.getBytes(charset)));
}else if ("DECRYPT".equals(type)) {
//警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除
// BASE64Decoder base64decoder = new BASE64Decoder();
// byte[] encodeByte = base64decoder.decodeBuffer(str);
byte[] encodeByte = Base64Encoder.decode(str.getBytes());
cipher.init(2, securekey, random);
byte[] decoder = cipher.doFinal(encodeByte);
return new String(decoder, charset);
}
return "type error";
} public static void main(String[] args) {
String encryptKey = "1";
String type = "ENCRYPT";
String charset = "UTF-8";
String str = "{\"phone\":\"1391111\",\"username\":\"张三\"}"; System.out.println("原始字符串 = " + str);
try {
//des加密
String DESStr= DesUtls.getDESStr(str,encryptKey,type,charset);
System.out.println("des加密 = " + DESStr);
//url编码
DESStr = URLEncoder.encode(DESStr,"UTF-8");
System.out.println("url编码 = " + DESStr); //url解码
String s = URLDecoder.decode(DESStr,"UTF-8");
System.out.println("url解码 = " + DESStr);
//javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
//des解密
System.out.println("des解密 = " + getDESStr(s,encryptKey,"DECRYPT","UTF-8"));
//ENCRYPT(des加密) encode(url编码) >> decode(url解码) encrypt(des解密) } catch (Exception e) {
e.printStackTrace();
}
} } package com.example.core.mydemo.des; import org.apache.commons.codec.binary.Base64; public class Base64Encoder {
/**
* @param bytes
* @return
*/
public static byte[] decode(final byte[] bytes) {
return Base64.decodeBase64(bytes);
} /**
* 二进制数据编码为BASE64字符串
*
* @param bytes
* @return
* @throws Exception
*/
public static String encode(final byte[] bytes) {
return new String(Base64.encodeBase64(bytes));
}
}
des加密,url编码,url解码,des解密 DES加解密及Wrong key size错误处理的更多相关文章
- Delphi编码与签名【URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1、HMAC-SHA224、HMAC-SHA256、HMAC-SHA384和HMAC-SHA512签名】
作者QQ:(648437169) 点击下载➨delphi编码与签名 [Delphi编码与签名]URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1.HMAC-SHA224.HMAC ...
- Web开发须知:URL编码与解码
通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义. 例如,Url参数字符串中使用key ...
- java中的url 编码与解码
什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型.当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www ...
- python接口自动化测试十三:url编码与解码
# url编码与解码 from urllib import parse url = 'http://zzk.cnblogs.com/s/blogpost?Keywords=中文' a = '中文' b ...
- LR URL编码和解码方法
问题:URL=http://www.baidu.com/s?wd=%E6%B5%B7%E6%B7%80%E9%BB%84%E5%BA%84"中要对%E6%B5%B7%E6%B7%80%E9% ...
- Oracle url编码与解码
Oracle url编码与解码 CreateTime--2018年3月30日17:26:36 Author:Marydon 一.url编码 实现方式:utl_url.escape() 说明:utl ...
- python中的URL编码和解码
python中的URL编码和解码:test.py # 引入urllib的request模块 import urllib.request url = 'https://www.douban.com/j/ ...
- 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数
来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...
- 关于URL编码/javascript/js url 编码/url的三个js编码函数
关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),encodeURI(),encodeURIComponent() 本文为您讲述关于js(javasc ...
- rest-assured的根路径(root path)和URL编码(URL Encoding)
一.根路径(Root path) 为了避免在body方法中使用重复的路径来断言,我们可以指定一个根路径(root path),比如: 我们以前的写法是: when(). get("/some ...
随机推荐
- [Kali] Kali 信息收集
网络空间测绘. 网络空间测绘是2016年出现的一个概念,主要指用一些技术方法,来探测全球互联网空间上的节点分布情况和网络关系索引,构建全球互联网图谱的一种方法. nmap端口扫描. 子域名爆破. ...
- WinForm 下的高性能笔迹方法
在 WPF 中可以通过 StylusPlugIn 的方式快速从触摸线程拿到触摸数据,而 WinForms 没有这个机制,但是可以通过 Microsoft.Ink 组件和 WPF 相同在 RealTim ...
- Mybatis的逆向工程(generator)
Tips:Mybatis generator官网 http://www.mybatis.org/generator/configreference/commentGenerator.html Myba ...
- linux系统共享文件夹到局域网
python3 -m http.server https://blog.csdn.net/a772304419/article/details/113338103 Debian下配置Samba服务器 ...
- [popover, select] el-popover内有select的时候在选择后会自动关闭
Steps to reproduce 选择某个选项后会自动关闭 What is Expected? 选择后不自动关闭,等点击按钮后再去触发组件内的关闭方法. What is actually happ ...
- uniapp去除button的边框
button { border: none !important; } button::after { border: none !important; }
- 7月 Splashtop上线了这些新功能 快来看鸭
经过我们的攻城狮天天努力,我们的软件又得到了升级和完善,上线了一些有用的新功能和增强功能,快来看看吧. Splashtop已为Splashtop Business Access,Splashtop远程 ...
- Delaunay三角剖分实现
参考文章:https://www.cnblogs.com/zhiyishou/p/4430017.html 本文使用逐点插入法进行剖分,并使用Unity3D实现. 通过阅读文章<Triangul ...
- video2blog 视频转图文AI小工具正式开源啦
前言 最近对一些小细节做了很多处理,但是其实还是有非常多的问题,没办法时间毕竟时间有限.为什么在这个时候开源,因为主要功能可以全部跑通了,分支暂时没开发的功能也可以通过其他的工具来替代. 这个工具开发 ...
- 带你彻底搞懂递归时间复杂度的Master公式
1. 什么是Master公式 1.1 Master公式的定义 Master公式,又称为Master定理或主定理,是分析递归算法时间复杂度的一种重要工具,尤其适用于具有分治结构的递归算法. \[T(n) ...