Java常用的加密技术

项目结构:

见红框内。

总体代码:

package VirtualUtils;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.Random;
public class CryptoUtils {private static final String ENCODE="utf-8";private static final String ALGORITHM="AES";private static final String PATTERN="AES/ECB/PKCS5PADDING";private static final String ALLCHAR="0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM";public static String GenerateKey(){StringBuffer buffer=new StringBuffer();Random random=new Random();for (int i = 0; i < 16; i++) {buffer.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));}return buffer.toString();}public static int GenerateIntKey(){Random random=new Random();return random.nextInt(999999999);}public static String encrypt_msg(String txt,String key) throws Exception {SecretKey secretKey=new SecretKeySpec(key.getBytes(ENCODE),ALGORITHM);Cipher cipher=Cipher.getInstance(PATTERN);cipher.init(Cipher.ENCRYPT_MODE,secretKey);byte[] encrypt_data= cipher.doFinal(txt.getBytes(ENCODE));return Base64.getEncoder().encodeToString(encrypt_data);}public static String decrypt_msg(String txt,String key) throws Exception {SecretKey secretKey=new SecretKeySpec(key.getBytes(ENCODE),ALGORITHM);Cipher cipher=Cipher.getInstance(PATTERN);cipher.init(Cipher.DECRYPT_MODE,secretKey);byte[] decrypt_data= cipher.doFinal(Base64.getDecoder().decode(txt));return new String(decrypt_data, ENCODE);}public static byte[] Encrypt_MD5(byte[]data) throws NoSuchAlgorithmException {MessageDigest digest=MessageDigest.getInstance("MD5");digest.update(data);return digest.digest();}public static byte[] Encrypt_SHA(byte[]data) throws NoSuchAlgorithmException {MessageDigest digest=MessageDigest.getInstance("SHA");digest.update(data);return digest.digest();}public static KeyPairGenerator generator;public static KeyPair keyPair;public static final class keystore{public byte[] public_key;public byte[] private_key;}static {try {generator=KeyPairGenerator.getInstance("RSA");generator.initialize(2048);keyPair=generator.generateKeyPair();}catch (Exception err){err.printStackTrace();}}public static keystore get_key_pair(){keystore key_value=new keystore();key_value.public_key=keyPair.getPublic().getEncoded();key_value.private_key=keyPair.getPrivate().getEncoded();return key_value;}public static byte[] encrypt_data_by_public(byte[] msg, byte[] key) throws Exception {KeyFactory keyFactory=KeyFactory.getInstance("RSA");X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(key);PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE,publicKey);return cipher.doFinal(msg);}public static byte[] decrypt_data_by_private(byte[] msg, byte[] key) throws Exception{KeyFactory keyFactory=KeyFactory.getInstance("RSA");PKCS8EncodedKeySpec pkcs8EncodedKeySpec=new PKCS8EncodedKeySpec(key);PrivateKey privateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE,privateKey);return cipher.doFinal(msg);}public static byte[] encrypt_data_by_private(byte[] msg, byte[] key) throws Exception{KeyFactory keyFactory=KeyFactory.getInstance("RSA");PKCS8EncodedKeySpec pkcs8EncodedKeySpec=new PKCS8EncodedKeySpec(key);PrivateKey privateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE,privateKey);return cipher.doFinal(msg);}public static byte[] decrypt_data_by_public(byte[] msg,byte[] key) throws Exception{KeyFactory keyFactory=KeyFactory.getInstance("RSA");X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(key);PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE,publicKey);return cipher.doFinal(msg);}public static String Base64ToString(byte[]data){return Base64.getEncoder().encodeToString(data);}public static String BytesToString(byte[]data,String encode) throws UnsupportedEncodingException {return new String(data,encode);}
}

代码组成:

单向加密:sha散列加密
public static byte[] Encrypt_SHA(byte[]data) throws NoSuchAlgorithmException {MessageDigest digest=MessageDigest.getInstance("SHA");digest.update(data);return digest.digest();}
单向加密:md5散列加密
public static byte[] Encrypt_MD5(byte[]data) throws NoSuchAlgorithmException {MessageDigest digest=MessageDigest.getInstance("MD5");digest.update(data);return digest.digest();}
对称加密:AES加密
private static final String ENCODE="utf-8";private static final String ALGORITHM="AES";private static final String PATTERN="AES/ECB/PKCS5PADDING";private static final String ALLCHAR="0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM";
public static String encrypt_msg(String txt,String key) throws Exception {SecretKey secretKey=new SecretKeySpec(key.getBytes(ENCODE),ALGORITHM);Cipher cipher=Cipher.getInstance(PATTERN);cipher.init(Cipher.ENCRYPT_MODE,secretKey);byte[] encrypt_data= cipher.doFinal(txt.getBytes(ENCODE));return Base64.getEncoder().encodeToString(encrypt_data);}public static String decrypt_msg(String txt,String key) throws Exception {SecretKey secretKey=new SecretKeySpec(key.getBytes(ENCODE),ALGORITHM);Cipher cipher=Cipher.getInstance(PATTERN);cipher.init(Cipher.DECRYPT_MODE,secretKey);byte[] decrypt_data= cipher.doFinal(Base64.getDecoder().decode(txt));return new String(decrypt_data, ENCODE);}
非对称加密:RSA加密
public static KeyPairGenerator generator;public static KeyPair keyPair;public static final class keystore{public byte[] public_key;public byte[] private_key;}static {try {generator=KeyPairGenerator.getInstance("RSA");generator.initialize(2048);keyPair=generator.generateKeyPair();}catch (Exception err){err.printStackTrace();}}public static keystore get_key_pair(){keystore key_value=new keystore();key_value.public_key=keyPair.getPublic().getEncoded();key_value.private_key=keyPair.getPrivate().getEncoded();return key_value;}public static byte[] encrypt_data_by_public(byte[] msg, byte[] key) throws Exception {KeyFactory keyFactory=KeyFactory.getInstance("RSA");X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(key);PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE,publicKey);return cipher.doFinal(msg);}public static byte[] decrypt_data_by_private(byte[] msg, byte[] key) throws Exception{KeyFactory keyFactory=KeyFactory.getInstance("RSA");PKCS8EncodedKeySpec pkcs8EncodedKeySpec=new PKCS8EncodedKeySpec(key);PrivateKey privateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE,privateKey);return cipher.doFinal(msg);}public static byte[] encrypt_data_by_private(byte[] msg, byte[] key) throws Exception{KeyFactory keyFactory=KeyFactory.getInstance("RSA");PKCS8EncodedKeySpec pkcs8EncodedKeySpec=new PKCS8EncodedKeySpec(key);PrivateKey privateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE,privateKey);return cipher.doFinal(msg);}public static byte[] decrypt_data_by_public(byte[] msg,byte[] key) throws Exception{KeyFactory keyFactory=KeyFactory.getInstance("RSA");X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(key);PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE,publicKey);return cipher.doFinal(msg);}
随机数生成(字符串):
public static String GenerateKey(){StringBuffer buffer=new StringBuffer();Random random=new Random();for (int i = 0; i < 16; i++) {buffer.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));}return buffer.toString();}
随机数生成(整形):
public static int GenerateIntKey(){Random random=new Random();return random.nextInt(999999999);}
Base64编码转字符串:
public static String Base64ToString(byte[]data){return Base64.getEncoder().encodeToString(data);}
字节数组转字符串:
public static String BytesToString(byte[]data,String encode) throws UnsupportedEncodingException {return new String(data,encode);}

代码测试:

import VirtualUtils.CryptoUtils;
public class Main {public static void main(String[]args) throws Exception {String msg="This is a test";CryptoUtils.keystore keystore=CryptoUtils.get_key_pair();byte[] en=CryptoUtils.encrypt_data_by_public(msg.getBytes("utf-8"),keystore.public_key);System.out.println(CryptoUtils.Base64ToString(CryptoUtils.decrypt_data_by_private(en,keystore.private_key)));System.out.println(new String(CryptoUtils.decrypt_data_by_private(en,keystore.private_key)));byte[] en1=CryptoUtils.encrypt_data_by_private(msg.getBytes("utf-8"),keystore.private_key);System.out.println(CryptoUtils.Base64ToString(en1));System.out.println(CryptoUtils.BytesToString(CryptoUtils.decrypt_data_by_public(en1,keystore.public_key),"utf-8"));}
}

测试结果:

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

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

相关文章

深入浅出线程原理

Linux 中的线程本质 线程接口由 Native POSIX Thread Library 提供&#xff0c;即&#xff1a;NPTL 库函数 线程被称为轻量级进程 (Light Weight Process) 每一个线程在内核中都对应一个调度实体&#xff0c;拥有独立的结构体 (task_struct) 内核设计&#xff1a;一个进程对…

【python】matplotlib画图常用功能汇总

目录: 一、matplotlib画图风格二、matplotlib图像尺寸和保存分辨率三、matplotlib子图相关功能创建子图&#xff1a;绘制子图&#xff1a;设置子图属性&#xff1a;调整布局&#xff1a;示例代码&#xff1a; 四、matplotlib字体设置字体族和字体的区别字体选择和设置1. Matplo…

亚马逊云科技 WAF 部署小指南(五):在客户端集成 Amazon WAF SDK 抵御 DDoS 攻击...

方案介绍 在 WAF 部署小指南&#xff08;一&#xff09;中&#xff0c;我们了解了 Amazon WAF 的原理&#xff0c;并通过创建 WEB ACL 和托管规则防护常见的攻击。也了解了通过创建自定义规则在 HTTP 请求到达应用之前判断是阻断还是允许该请求。在 Amazon WAF 自定义规则中&am…

水果音乐编曲软件 FL Studio v21.2.2.3914 中文免费版(附中文设置教程)

FL studio21中文别名水果编曲软件&#xff0c;是一款全能的音乐制作软件&#xff0c;包括编曲、录音、剪辑和混音等诸多功能&#xff0c;让你的电脑编程一个全能的录音室&#xff0c;它为您提供了一个集成的开发环境&#xff0c;使用起来非常简单有效&#xff0c;您的工作会变得…

【书生·浦语】大模型实战营——第四课作业

教程文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/xtuner/self.md 基础作业需要构建数据集&#xff0c;微调模型&#xff0c;让其明白自己的弟位&#xff08;OvO&#xff01;&#xff09; 微调环境准备 进入开发机后&#xff0c;先bash&#xff0c;再创…

列表解析与快速排序

排序是在对文本、数值等数据进行操作时常用的功能&#xff0c;本文介绍两种常用的排序方式&#xff0c;借此学习列表解析&#xff0c;并巩固递归算法。 1 选择排序 说到排序&#xff0c;以数值为例&#xff0c;肯定涉及到值大小的对比&#xff0c;选择排序即通过依次在子集中…

蓝桥杯 python 第二题 数列排序

这里给出一种解法 """ # 错的 n int(input()) dp[int(i) for i in input().split(" ")] dp.sort() print(" ".join(str(i) for i in dp)) """#这个是对的 num int(input())l list(map(int, input().split()))l.sort()pr…

AI文本生图模型Stable Diffusion部署教程

本文基于CentOS8进行Stable Diffusion开源框架部署. 1. DNS配置(但是今天出现了偶尔无法下载问题) 为了加速Github访问,我在本机配置如下 (sd) [rootshenjian stable-diffusion-webui]# cat /etc/hosts 127.0.0.1 shenjian localhost localhost.localdomain localhost4 loca…

修改权限控制(chmod命令、chown命令)

1.chmod命令 功能&#xff1a;修改文件、文件夹权限&#xff08;注意&#xff0c;只有文件、文件夹的所属用户或root用户可以修改&#xff09; 语法&#xff1a;chmod [-R] 权限 参数 权限&#xff0c;要设置的权限&#xff0c;比如755&#xff0c;表示&#xff1a;rwxr-xr-x…

【面试突击】生产部署面试实战

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

如何从电脑找回/恢复误删除的照片

按 Shift Delete 以后会后悔吗&#xff1f;想要恢复已删除的照片吗&#xff1f;好吧&#xff0c;如果是这样的话&#xff0c;那么您来对地方了。在本文中&#xff0c;我们将讨论如何从 PC 中检索已删除的文件。 自从摄影的概念被曝光以来&#xff0c;人们就对它着迷。早期的照…

Markdown编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Windows Server 2012 R2部署项目

JDK 下载JDK 1.直接官网下载&#xff1a;http://www.oracle.com/&#xff1b; 2.我用的是1.8&#xff0c;阿里云盘分享地址&#xff1a;https://www.aliyundrive.com/s/u4V9x1AHL2r 安装jdk 双击安装点击下一步如果不改变路径就一直下一步 安装完成直接点击关闭即可&#x…

GPT Store,是否会成为下一个App Store?

经历了一场风波后&#xff0c;原本计划推出的GPT Store终于成功上线。OpenAI在北京时间1月11日推出了GPT Store&#xff0c;被广泛视为类似于苹果的"App Store"&#xff0c;为人工智能应用生态系统迈出了重要一步。然而&#xff0c;OpenAI要想将GPT Store打造成苹果般…

一、docker的安装与踩坑

目录 一、安装docker&#xff08;centos7安装docker&#xff09;1.安装环境前期准备2.参考官网安装前准备3.参考官网安装步骤开始安装docker4.运行首个容器 二、安装一些软件的踩坑1.启动docker踩坑2.安装mysql踩坑3.罕见问题 三、关于我的虚拟机 一、安装docker&#xff08;ce…

如何再造宇宙厂所有APP?

本文内容&#xff0c;纯属十年老架构师杜撰&#xff0c;切勿照着实操&#xff0c;可能会给你带来几十亿的流量&#xff0c;怕你的服务器扛不住。 1. 破音 前端用uniapp&#xff0c;花800买个短视频应用模板&#xff0c;后端用golang支持高并发, 数据库用图数据库加elastic se…

ArchVizPRO Interior Vol.8 URP

ArchVizPRO Interior Vol.8 URP是一个在URP中制作的建筑可视化项目。这是一个完全可导航的现代公寓,包括一个带开放式厨房的客厅、休息区、两间卧室和两间浴室。从头开始构建每一个细节,这个室内有130多件家具和道具、自定义着色器和4K纹理。所有家具和道具都非常详细,可以在…

基于 LangChain+大模型,我打造一款自己的LLM应用

本文共计1.7w字&#xff0c;梳理不易&#xff0c;喜欢点赞、收藏、关注。需要技术交流&#xff0c;可以加入我们 目录 通俗易懂讲解大模型系列技术交流一、LangChain是什么二、LangChain核心组件2.1 Models2.2 Indexes2.2.1 Document Loaders2.2.2 Text Splitters2.2.3 Vectors…

网络安全B模块(笔记详解)- MYSQL信息收集

MYSQL信息收集 1.通过渗透机场景Kali中的渗透测试工具对服务器场景MySQL03进行服务信息扫描渗透测试(使用工具Nmap,使用必须要使用的参数),并将该操作显示结果中数据库版本信息作为Flag提交; Flag:MySQL 5.5.12 2.通过渗透机场景Kali中的渗透测试工具对服务器场景MySQL0…

【光波电子学】基于MATLAB的多模光纤模场分布的仿真分析

基于MATLAB的多模光纤模场分布的仿真分析 一、引言 &#xff08;1&#xff09;多模光纤的概念 多模光纤&#xff08;MMF&#xff09;是一种具有较大纤芯直径的光纤结构&#xff0c;其核心直径通常在10-50微米范围内。与单模光纤&#xff08;SMF&#xff09;相比&#xff0c;…