加密、解密、编码

news2024/12/25 9:22:10

urlencode

urlencode_百度百科

Base64是一种二进制到文本的编码方式,而且编码出的字符串只包含ASCII基础字符

下图是Base64码表,可以看到从0到63的每个数字都对应一个上面的一个字符。

文件-base64字符串互转

sun.misc包中的类

try (FileOutputStream fos = new FileOutputStream(hdfsConfig.getTempDir() + fileName)) {
    BASE64Decoder decoder = new BASE64Decoder();
    byte[] b = decoder.decodeBuffer(baseStr);
    fos.write(b);
    fos.flush();
}

java.util包中的类

String content = "";
byte[] decode = Base64.getDecoder().decode(content);
FileUtils.writeByteArrayToFile(new File(localZipFilePath), decode);

md5

commons-codec.jar

import org.apache.commons.codec.digest.DigestUtils;

/** * MD5加密之方法一 * @explain 借助apache工具类DigestUtils实现 * @param str * 待加密字符串 * @return 16进制加密字符串 */
public static String encryptToMD5(String str) { 
   
	return DigestUtils.md5Hex(str);
}  

java.security.MessageDigest

/** * MD5加密之方法二 * @explain java实现 * @param str * 待加密字符串 * @return 16进制加密字符串 */
public static String encrypt2ToMD5(String str) { 
   
	// 加密后的16进制字符串
	String hexStr = "";
	try { 
   
		// 此 MessageDigest 类为应用程序提供信息摘要算法的功能
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		// 转换为MD5码
		byte[] digest = md5.digest(str.getBytes("utf-8"));
		hexStr = ByteUtils.toHexString(digest);
	} catch (Exception e) { 
   
		e.printStackTrace();
	}
	return hexStr;
}  

spring核心包org.springframework.util.DigestUtils

/** * MD5加密之方法三 * @explain springboot自带MD5加密 * @param str * 待加密字符串 * @return 16进制加密字符串 */
 public static String encrypt3ToMD5(String str) { 
   
 	log.debug("MD5待加密字符串:\n"+str);
 	String md5 = " ";
 	try { 
   
 	md5 = DigestUtils.md5DigestAsHex(text.getBytes("utf-8"))
    } catch (UnsupportedEncodingException e) { 
   
    e.printStackTrace();
    }
    log.degbug("MD5加密结果:\n"+md5)
    return md5;
 }

SHA1

对称加密算法

DES

package org.cc.lipiao;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.Key;

public class EncritAndDecrit {

    private static String src = "imooc security des";

    public static void main(String[] args) {
        desDemo();
    }

    private static void desDemo(){
        try {
            //生成KEY
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
            keyGenerator.init(56);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] bytesKey = secretKey.getEncoded();

            //KEY转换
            DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
            SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
            Key convertSecretKey = factory.generateSecret(desKeySpec);

            //加密
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
            byte[] result = cipher.doFinal(src.getBytes());

            //解密
            cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
            result = cipher.doFinal(result);
            System.out.println("jdk des decrypt : " + new String(result));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

AES

非对称加密算法

RSA

加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。

基于JDK RSA算法实现非对称加密解密

package org.cc.lipiao;

import org.apache.tomcat.util.codec.binary.Base64;

import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

public class EncritAndDecrit {

    private static final String RSA = "RSA";
    private static  byte[] privateKeyBytes ;
    private static  byte[] publicKeyBytes ;
    private static String src = "imooc security rsa";

    public static void main(String[] args) throws Exception {
        String s = publicKeyCrypto(src);
        privateKeyDecrypto(s);

        String s1 = privateKeyCrypto(src);
        publicKeyDecrypto(s1);
    }

    static {
        try {
            KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance(RSA);
            senderKeyPairGenerator.initialize(512);
            KeyPair keyPair = senderKeyPairGenerator.generateKeyPair();
            privateKeyBytes = keyPair.getPrivate().getEncoded();
            publicKeyBytes = keyPair.getPublic().getEncoded();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 公钥加密
     * @param originStr
     * originStr 需要加密的原始字符串
     * @return 经过公钥加密并base64编码的字符串
     */
    public static String publicKeyCrypto(String originStr) throws Exception{
        KeyFactory keyFactory = KeyFactory.getInstance(RSA);
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKeyBytes);
        PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
        Cipher cipher = Cipher.getInstance(RSA);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] result = cipher.doFinal(originStr.getBytes());
        System.out.println("公钥加密后base64编码:" + Base64.encodeBase64String(result));
        return  Base64.encodeBase64String(result);
    }
    /**
     * 私钥解密
     * @param publicKeyCryptoStr
     * publicKeyCryptoStr 经过公钥加密并base64编码的字符串
     * @return 未加密的原始字符串
     */
    public static String privateKeyDecrypto(String publicKeyCryptoStr) throws Exception {
        byte [] originStrBytes = Base64.decodeBase64(publicKeyCryptoStr.getBytes());
        KeyFactory keyFactory = KeyFactory.getInstance(RSA);
        Cipher cipher = Cipher.getInstance(RSA);
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] result = cipher.doFinal(originStrBytes);
        System.out.println("解密得到的字符串:" + new String(result));
        return new String(result);
    }

    /**
     * 私钥加密
     * @param originStr
     * originStr 需要加密的原始字符串
     * @return 经过私钥加密并base64编码的字符串
     */
    public static String privateKeyCrypto(String originStr) throws Exception {

        String resultStr = "";
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(RSA);
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
        Cipher cipher = Cipher.getInstance(RSA);
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        byte[] result = cipher.doFinal(originStr.getBytes());
        System.out.println("加密结果经过base64编码:" + Base64.encodeBase64String(result));
        resultStr =  Base64.encodeBase64String(result);
        return resultStr;
    }
    /**
     * 公钥解密
     * @param privateKeyCryptoStr
     * privateKeyCryptoStr 经过私钥加密后并base64编码的字符串
     * @return 未加密的原始字符串
     */
    public static String publicKeyDecrypto(String privateKeyCryptoStr) throws Exception {
        byte [] originStrBytes = Base64.decodeBase64(privateKeyCryptoStr.getBytes());
        String resultStr = "";
        KeyFactory keyFactory = KeyFactory.getInstance(RSA);
        Cipher cipher = Cipher.getInstance(RSA);
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKeyBytes);
        PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
        cipher.init(Cipher.DECRYPT_MODE, publicKey);
        byte[] result = cipher.doFinal(originStrBytes);
        System.out.println("公钥解密后:" + new String(result));
        resultStr = new String(result);
        return resultStr;
    }

}

DSA

BouncyCastle

相关参考链接:

国密算法介绍 - 知乎国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术…https://zhuanlan.zhihu.com/p/132352160

浅谈常见的七种加密算法及实现 - 知乎前言 数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达…https://zhuanlan.zhihu.com/p/347114235

api中文文档

API Reference Documenthttps://www.apiref.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.Js安装与配置教程

目录 1.下载官网 2.选择安装路径 3.添加环境变量 4.验证是否安装成功 5.修改模块下载位置 (1)查看npm默认存放位置 6.在node.js安装目录下,创建两个文件夹 7.修改默认文件夹 8.测试默认位置是否更改成功 9.安装报错解决办法 10.路径未更改成功解决办法 …

MIT 6.830数据库系统 -- lab six

MIT 6.830数据库系统 -- lab six 项目拉取引言steal/no-force策略redo log与undo log日志格式和检查点 开始回滚练习1:LogFile.rollback() 恢复练习2:LogFile.recover() 测试结果疑问点分析 项目拉取 原项目使用ant进行项目构建,我已经更改为…

【uniapp 小程序开发页面篇】代码编写规范 | 页面编写规范 | 小程序API

博主:_LJaXi Or 東方幻想郷 专栏: uni-app | 小程序开发 开发工具:HBuilderX 小程序开发页面篇 小程序组件规范小程序介绍小程序规范代码编写规范须遵循的开发规范 运行特性编译器选择编译规则工程目录结构static目录 使用注意static目录 条件…

Spring-2-透彻理解Spring 注解方式创建Bean--IOC

今日目标 学习使用XML配置第三方Bean 掌握纯注解开发定义Bean对象 掌握纯注解开发IOC模式 1. 第三方资源配置管理 说明:以管理DataSource连接池对象为例讲解第三方资源配置管理 1.1 XML管理Druid连接池(第三方Bean)对象【重点】 数据库准备 -- 创建数据库 create …

Easys Excel的表格导入(读)导出(写)-----java

一,EasyExcel官网: 可以学习一些新知识: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 二,为什么要使用easyexcle excel的一些优点和缺点 java解析excel的框架有很多 : poi jxl,存在问题:非常的消耗内存, easyexcel 我们…

使用TDOSCommand调用Powershell脚本对进程进行操作

列出当前运行的进程: varPowerShellPath, ScriptPath, CommandLine: string; beginMemo6.Clear;PowerShellPath : powershell.exe ; // 假设 PowerShell 可执行文件在系统环境变量中// 构造命令行参数CommandLine : Get-Process | Select-Object Name,Id;// 设置命…

【Linux】总结2-进程篇1

文章目录 冯诺伊曼结构操作系统什么是程序?什么是进程?操作系统是如何来管理进程的?PCB(struct task_struct{...}) 冯诺伊曼结构 冯诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行…

Stable Diffusion - 常用的负向提示 Embeddings 解析与 坐姿 (Sitting) 提示词

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132145248 负向 Embeddings 是用于提高 StableDiffusion 生成图像质量的技术,可以避免生成一些不符合预期的图像特征,比如…

day5gdb调试模式和makefile

一、gdb调试 1.1gdb调试的作用 gdb调试检查的是逻辑错误,而非语法错误 1.2gdb流程 1、gcc -g 1.c ---->加-g参数的作用,生成可以调试的gdb文件 2、gdb 可执行文件名/a.out ---->进入gdb工具进行调试 3、输入l,带行号打印文件信息…

管理类联考——逻辑——论证逻辑——汇总篇——目录+提炼

文章目录 一、削弱方法关系的削弱必要方法的削弱因果推理的削弱果因推理的削弱概念跳跃的削弱数量比例的削弱比例因果的削弱 二、支持方法关系的支持必要方法的支持因果推理的支持果因推理的支持概念跳跃的支持数量比例的支持比例因果的支持 三、假设方法关系的假设必要方法的假…

不分股权不分管理,只分利润:共享模式的新零售布局

实体行业如何通过共享模式去整合那些有资源的人,来完成新零售的一个布局?比如对于餐饮行业而言,一样的资源,经常有用餐、聚餐需求的人是谁? 有商会组织者、公司的管理层、培训机构、社群群主等等。那么如何把这些人整…

记一次Linux启动Mysql异常解决

文章目录 第一步: netstat -ntlp 查看端口情况2、启动Mysql3、查看MySQL日志 tail -100f /var/log/mysqld.log4、查看磁盘占用情况:df -h5、思路小结 第一步: netstat -ntlp 查看端口情况 并没有发现3306数据库端口 2、启动Mysql service …

【Windows】Windows11系统用户自己添加开机启动项的方法

按win R快捷键,打开运行窗口,在输入框中输入shell:startup后点击运行,打开启动文件夹: 把想增加的开机启动软件的快捷方式图标拖入到该文件夹中,如下图所示: 按ctrl shift esc打开任务管理器&#xff0c…

UWB伪应用场景 - 别再被商家忽悠

近几年UWB技术在网上宣传得如火如荼,与高精度定位几乎或等号,笔者认为这是营销界上的一大成功案例。 UWB超宽带技术凭借着低功耗、高精度,确实在物联网行业混得风生水起,但在无数实际应用案例中,根据客户的反馈情况&a…

python小游戏代码200行左右,python小游戏代码1000行

大家好,小编为大家解答20行python代码的入门级小游戏的问题。很多人还不知道python小游戏代码200行左右,现在让我们一起来看看吧! 大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今…

Spring-2-深入理解Spring 注解依赖注入(DI):简化Java应用程序开发

今日目标 掌握纯注解开发依赖注入(DI)模式 学习使用纯注解进行第三方Bean注入 1 注解开发依赖注入(DI)【重点】 问题导入 思考:如何使用注解方式将Bean对象注入到类中 1.1 使用Autowired注解开启自动装配模式(按类型) Service public class StudentS…

redis基础(三十六)

安装redis、配置redis 目录 一、 概述 (一)NoSQL 1、类型 2、应用场景 (二)Redis 二、安装 (一)编译安装 (二)RPM安装 三、目录结构 四、命令解析 五、redis登录更改 1、…

三层交换实验

前言 在实际的企业应用中,我们会先建立不同的vlan把用户先隔开来。然后再通过三次交换机技术打通vlan直接的网络。 这样的目的如下: 隔离: 隔离是广播域,也就是隔离的是故障连通: 连通的是正常的通信 比如校园网&am…

在魔塔社区搭建通义千问-7B(Qwen-7B)流程

复制以下语句 python3 -m venv myvenvsource myvenv/bin/activatepip install modelscope pip install transformers_stream_generator pip install transformers pip install tiktoken pip install accelerate pip install bitsandbytestouch run.py vi run.py复制下面代码粘…

IMV5.0

背景内容: 经历了多个版本,基础内容在前面,可以使用之前的基础环境: v1: https://blog.csdn.net/wtt234/article/details/132139454 v2: https://blog.csdn.net/wtt234/article/details/132144907 v3&#…