首页 > 其他分享 >des加密,url编码,url解码,des解密 DEMO

des加密,url编码,url解码,des解密 DEMO

时间:2023-12-20 22:55:55浏览次数:28  
标签:return String url DEMO des str import

des加密,url编码,url解码,des解密 DEMO

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.net.URLDecoder;
import java.net.URLEncoder;
import java.security.SecureRandom;

/**
 * output:
 * 原始字符串 = {"phone":"1391111","username":"张三"}
 * des加密 = 0O8cJ5ZMZyVBL0DUiBoWkLuUvajcaOKqC/4RTWcl6+fjdjK/gXWWJg==
 * url编码 = 0O8cJ5ZMZyVBL0DUiBoWkLuUvajcaOKqC%2F4RTWcl6%2BfjdjK%2FgXWWJg%3D%3D
 * url解码 = 0O8cJ5ZMZyVBL0DUiBoWkLuUvajcaOKqC%2F4RTWcl6%2BfjdjK%2FgXWWJg%3D%3D
 * des解密 = {"phone":"1391111","username":"张三"}
 */
public class DesUtls {

    public static String getDESStr(String str, String encryptKey, String type, String charset) throws Exception {
        SecureRandom random = new SecureRandom();
        DESKeySpec desKey = new DESKeySpec(encryptKey.getBytes());
        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 = "testkey111";
        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));
    }
}

 

标签:return,String,url,DEMO,des,str,import
From: https://www.cnblogs.com/oktokeep/p/17917821.html

相关文章

  • JS获取 URL 链接参数
    方法一源码:functionGetQueryString(name){varreg=newRegExp("(^|&)"+name+"=([^&]*)(&|$)");varr=window.location.search.substr(1).match(reg);if(r!=null)returnunescape(r[2]);returnnull;}使用:consol......
  • helpdesk与Local IT有什么区别?
    随着信息技术的不断发展,企业和组织越来越依赖于IT来支持业务运作。在这个过程中,helpdesk和LocalIT扮演着重要的角色,但它们在功能和范围上存在一些区别。 首先,helpdesk是一个专门为用户提供技术支持和解决问题的服务台。helpdesk团队通常由专业的技术支持人员组成,他们负责接听......
  • 比Wget、Curl更强大的下载工具! 转载
    作者:Escape 链接:https://www.escapelife.site/posts/7a3b6469.htmlaria2是一款轻量且高效的命令行下载工具。堪称下载利器!介绍说明轻量、高效、命令行aria2 是一款轻量且高效命令行下载工具,它提供了对多协议和多源地址的支持,并尝试将下载带宽利用率最大化,目前支持的协......
  • TripleDES在java与c#中的区别
        C#下TripleDES默认支持16位和24位的秘钥,而Java下的DESedeKeySpec就只支持24位,其实怎么说呢,按3DES规范要求,的确其秘钥应该是24位而不是16位的,但16位秘钥可以按前8位+后8位+前8位的规则来升级成24位的秘钥,所以我们只需要简单的通过数组的Copy就可以将16位秘钥升级为24......
  • 无涯教程-URL Processing函数
    URL代表"统一资源定位器",代表万维网上的资源,例如网页或FTP目录。本节向您展示如何编写与URL通信的Java程序。URL可以分为以下部分:protocol://host:port/path?query#ref例sofprotocolsincludeHTTP,HTTPS,FTP,andFile.Thepathisalsoreferredtoasthefilen......
  • Gowin FPGA Designer 简介
    高云FPGADesigner是高云FPGA开发的IDE软件,软件包不大,安装包241M,解压Gowin_V1.9.8.07_vin压缩包,后点击文件夹的exe安装包,直接一直按下一步,完成软件的安装,安装后在桌面会有如下图标  双击打开软件,进入主界面,如下  软件的使用,请参考软件使用视频或者在高云官......
  • Ant Design + List + 滚动加载列表
    <div><InfiniteScrolldataLength={load.length}hasMore={load.length<datas.length+1}loader={null}endMessage={null}onScroll={(e)=>{/*屏幕发生滚动的执行方法。也可以采用官网的next+scrollableTarget或者loadMore也可*/......
  • PowerDesigner中Table视图设置同时显示Code和Name
    前言:用过PowerDesigner的都知道,PowerDesigner的Table视图默认只显示Name,也就是字段名称,并不显示字段的Code,那么如何让PowerDesigner同时显示Code和Name呢?显示效果设置步骤点击“Tools”,再点击“DisplayPreferences”点击“Table”,再点击“Advanced”点击“Column......
  • P8386 [PA2021] Od deski do deski 题解
    显然是一道计数dp。dp状态应该是最难的一部分了,个人认为这种状态设计得比较巧妙。如果像我刚开始一样设\(dp_{i,j}\)表示序列中一共有\(i\)个数,序列最后一个数为\(j\)的合法方案数的话,那么方程就会变得很不好转移,因为我们不知道当前的\(j\)和之前的某些数能不能匹配上,......
  • Designated-Verifier Aggregate Signature Scheme With Sensitive Data Privacy Prote
    Abstract—AggregatesignaturesenablethesensornodesofIndustrialInternetofThingstosendtheirsignaturestotheaggregatortorealizesignaturecompression.Beforebeingstoredinthedatacenter,sensitivedataandnon-sensitivedatashouldadopt......