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错误处理的更多相关文章

  1. 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 ...

  2. Web开发须知:URL编码与解码

    通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义. 例如,Url参数字符串中使用key ...

  3. java中的url 编码与解码

    什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型.当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www ...

  4. python接口自动化测试十三:url编码与解码

    # url编码与解码 from urllib import parse url = 'http://zzk.cnblogs.com/s/blogpost?Keywords=中文' a = '中文' b ...

  5. 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% ...

  6. Oracle url编码与解码

      Oracle url编码与解码 CreateTime--2018年3月30日17:26:36 Author:Marydon 一.url编码 实现方式:utl_url.escape() 说明:utl ...

  7. python中的URL编码和解码

    python中的URL编码和解码:test.py # 引入urllib的request模块 import urllib.request url = 'https://www.douban.com/j/ ...

  8. 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数

    来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...

  9. 关于URL编码/javascript/js url 编码/url的三个js编码函数

    关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),encodeURI(),encodeURIComponent() 本文为您讲述关于js(javasc ...

  10. rest-assured的根路径(root path)和URL编码(URL Encoding)

    一.根路径(Root path) 为了避免在body方法中使用重复的路径来断言,我们可以指定一个根路径(root path),比如: 我们以前的写法是: when(). get("/some ...

随机推荐

  1. 快手基于RocketMQ的在线消息系统建设实践

    简介: 快手需要建设一个主要面向在线业务的消息系统作为 Kafka 的补充,低延迟.高并发.高可用.高可靠的分布式消息中间件 RocketMQ 正是我们所需的. 作者:黄理 黄理,10多年软件开发和架 ...

  2. AI圈内卷?天池团聚请来专家集体“问诊”

    ​简介: 近期杭州云栖大会上出现了一个"数据博物馆",最吸引眼球的"展品",竟是行业大规模开源数据集.不仅数量多达上百个,还覆盖零售.文娱.工业.医疗.自然科学 ...

  3. [ML] 详解 ChatGLM-webui 的启动使用与 ChatGLM-6B 常见问题

      1. ChatGLM-webui 总共支持以下几个命令选项: 2. 以 windows 为例,在 PowerShell 里运行命令: # 安装依赖 pip install torch==1.13. ...

  4. [FAQ] VScode 用户代码片段设置

      以PHP为示例,配置如下: { "dpe": { "prefix": "dpe", "body": [ " ...

  5. dotnet Roslyn 通过读取 suo 文件获取解决方案的启动项目

    本文来告诉大家一个黑科技,通过 .suo 文件读取 VisualStudio 的启动项目.在 sln 项目里面,都会生成对应的 suo 文件,这个文件是 OLE 格式的文件,文件的格式没有公开,本文的 ...

  6. Pinpoint对k8s关键业务模块进行全链路监控(17)

    一.全链路监控概述 1.1 什么是全链路监控 在分布式微服务架构中,系统为了接收并处理一个前端用户请求,需要让多个微服务应用协同工作,其中 的每一个微服务应用都可以用不同的编程语言构建,由不同的团队开 ...

  7. 手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket)

    前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: https://www.callicoder.com/spring-boot-websocke ...

  8. 四:海思Hi3516CV500/Hi3516DV300

    Hi3516CV500 和 Hi3516DV300 均是海思推出的 IP Camera  SoC [System-on-a-Chip:SoC芯片是一种集成电路的芯片] 芯片. 针对海思 HI3516D ...

  9. 02. rails安装

    rails安装 ruby 1.8.6 对应的rails是2.3.2 Ruby 1.8.7 或 1.9.2 对应的rails 2.3.x ruby1.9.3,对应的rails是3.2.12, ruby2 ...

  10. 深入理解Django:中间件与信号处理的艺术

    title: 深入理解Django:中间件与信号处理的艺术 date: 2024/5/9 18:41:21 updated: 2024/5/9 18:41:21 categories: 后端开发 ta ...