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 ...
随机推荐
- KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了!
简介:时间来到 2022 年,KubeVela 也正式进入了第四个阶段,在原先核心控制器 API 基本稳定的基础上,我们以插件的形式增加了一系列开箱即用的功能.让开发者可以通过 UI 控制台的方式, ...
- ARM 反汇编速成
1.跳转指令 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX 带链接和状态切换的无条件跳转 B loc_地址 BNE, BEQ 2.存储器与寄存器交互数据指令 ...
- [Cryptocurrency] rDAI 与 DAI 的区别, 如何质押 rDAI 获取利息
以下合约操作需要在安装 MetaMask ( 以太坊的浏览器钱包 ) 的情况下进行. rDAI 通过和 DAI 1 : 1 互换得到,在 rDAI 提供的 dapp 上面操作 https://app ...
- 关于多个 Cookie 的分隔符这件事
对于 Cookie 的处理上,我最近遇到一个问题,那就是如何分割 Cookie 的内容.有人说是使用逗号分割,有人说是使用分号分割,究竟用哪个才是对的?其实这个答案是需要分为两个过程,分别是请求和响应 ...
- 实验1 在MAX10 FPGA上实现组合逻辑
实验1 在MAX10 FPGA上实现组合逻辑 实验前的准备工作:参照讲义步骤安装Quartus,Modelsim和System Builder.阅读材料:1)推荐的文件组织形式:2)Verilog 1 ...
- SAP UI5 官方教程学习记录
最近有闲跟着官方的Get Started教程学习了UI5,记录一下自己学习中遇到的几个问题. 本文链接:https://www.cnblogs.com/hhelibeb/p/17835722.html ...
- 谷歌 hackbar 不能使用的问题
谷歌 hackbar 不能使用的问题 下载 hackbar 插件:https://github.com/Mr-xn/hackbar2.1.3 解压文件,将其拖入 chrome 扩展程序中 点击详情,点 ...
- gorm使用小结
增 db.Create(user) db.Save(user) 参数只能用**结构体指针****,因为要根据指针写入该条插入的数据, 所以user可以作为该条数据使用. 新增只能用结构体 save方法 ...
- VueJS和Javascript实现文字上下滚动效果
一提到文字上下滚动,我们就会想到用不同的程序去实现,而且页面中有文字滚动会增加这个网页的互动和可信度. 1.Js最简单的方法是控制盒子的高度,使不断的重复添加 <html> <bod ...
- 用 C 语言开发一门编程语言 — 字符串与文件加载
目录 文章目录 目录 前文列表 字符串 读取字符串 注释 文件加载函数 命令行参数 打印函数 报错函数 源代码 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器> <用 C ...