Java常用的加密技术

news2024/9/27 23:32:20

项目结构:

见红框内。

总体代码:

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.coloradmin.cn/o/1379677.html

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

相关文章

WebServer 跑通/运行/测试(详解版)

&#x1f442; 椿 - 沈以诚 - 单曲 - 网易云音乐 目录 &#x1f382;前言 &#x1f33c;跑通 &#xff08;1&#xff09;系统环境 &#xff08;2&#xff09;克隆源码 &#xff08;3&#xff09;安装和配置 Mysql &#xff08;4&#xff09;写 sql 语句 &#xff08;5&…

文件操作(一)

目录 一.什么是文件 1.程序文件和数据文件 2.文件名 3&#xff0c;文本文件和二进制文件 二.文件的打开和关闭 1.流和标准流 2.文件指针 3.文件的打开与关闭 三.结尾 一.什么是文件 在我们学习文件操作之前我们先了解一下什么是文件&#xff1f;以及文件为什么使用文件…

【Effective Objective - C】—— 熟悉Objective-C

【Effective Objective - C】—— 熟悉Objective-C 熟悉Objective-C1.oc的起源消息和函数的区别运行期组件和内存管理要点&#xff1a; 2.在类的头文件中尽量少引入其他头文件向前声明要点&#xff1a; 3.多使用字面量语法&#xff0c;少用与之等价的方法字符串字面量字面数值字…

小程序基础学习(导航栏组件)

一&#xff0c;创建组件 二&#xff0c;组件传入参数 三&#xff0c;组件接收参数 四&#xff0c;组件渲染参数 五&#xff0c;组件代码 <!--components/daoHangLan/daoHangLan.wxml--> <view class"titles"><block wx:for"{{titles}}"…

第 3 章 Keepalived 双机热备

技能展示&#xff1a; 会构建双机热备系统 会构建 LVSHA 高可用群集 在这个高度信息化的 IT 时代&#xff0c;企业的生产系统、业务运营、销售和支持&#xff0c;以及日常管理等环节越来越依赖于计算机信息和服务&#xff0c;对高可用&#xff08;HA&#xff09;技术的应用需求…

Python3.5如何打包编译

python3.5怎么打包编译 问题&#xff1a;用Python开发的小工具有时需要编译打包为Windows(*.exe)、Mac等操作系统下的可执行性文件以供非程序员使用。 解决方案&#xff1a; 一、py2exe 目前只支持到Python3.4&#xff0c;暂不支持Python3.5 二、PyInstaller 安装&#x…

C#人力资源管理系统源码

C#人力资源管理系统源码 源码描述&#xff1a; 该系统利用asp.net中mvc,linq搭建开发&#xff0c; 分权限管理 权限级别分为&#xff1a;管理员&#xff0c;经理&#xff0c;专员&#xff0c;员工等 管理员可以管理角色、菜单 经理可以管理 组织规划&#xff0c;员工管理&#…

微信商家转账到零钱,既能单笔又能批量,支持多商户管理

大家好&#xff0c;我是小悟 微信商家转账到零钱的功能大家应该都熟悉吧&#xff0c;为了满足商家向用户微信零钱转账的需求&#xff0c;微信支付推出【商家转账到零钱】服务&#xff0c;方便商户可以一次向单个或多个用户的微信零钱转账。 商家转账到零钱为商户提供了简便、…

【Qt 学习之路】关于C++ Vlc视频播放

文章目录 1、简介2、效果2.1、视频2.2、动态图 3、核心代码3.1、判断视频3.2、视频核心类调用3.3、视频核心类3.3.1、头文件3.3.2、源文件 1、简介 最近有童鞋咨询VLC相关的问题&#xff0c;公布一个 5年前 编写的 VLC示例 代码供参考学习。包括正常对视频各种常用的操作&…

ASP.NET进销存系统源码

ASP.NET进销存系统源码 功能介绍&#xff1a; 财务 销售清单&#xff0c;填写销售单&#xff0c;客户管理&#xff0c;添加客户资料 销售 销售清单&#xff0c;填写销售单&#xff0c;客户管理&#xff0c;添加客户资料 仓库 仓库结存&#xff0c;仓库盘点&#xff0c;盘点结…

App在线封装的革命性创新

随着移动互联网的蓬勃发展&#xff0c;App已经成为我们日常生活中不可或缺的一部分。从购物、交通、社交到娱乐&#xff0c;几乎每个人的智能手机都装载着数十个应用程序&#xff0c;以满足各式各样的需求。然而&#xff0c;对于许多非技术背景的企业家和小型企业而言&#xff…

【JAVA基础--计算机网络】--TCP三次握手+四次挥手

三次握手四次挥手 写在前面1. 三次握手1.1 作用&#xff1a; 为了在不可靠的信道上建立起可靠的连接&#xff1b;1.2 建立过程1.3 面试提问 2. 四次挥手2.1 作用&#xff1a;为了在不可靠的网络信道中进行可靠的连接断开确认2.2 断开过程2.3 面试提问 写在前面 三次握手建立连…

2.4G无线遥控器方案开发,稳定性强,可用于多种应用

2.4G遥控器是一种使用2.4GHz频段的无线遥控器&#xff0c;常用于遥控玩具、航模和家电等电子设备上。相比于传统的红外线遥控器&#xff0c;2.4G遥控器具有更强的穿透力和稳定性&#xff0c;可以在较远的距离内实现遥控操作&#xff0c;并且不会受到光线干扰。它由遥控器和接收…

【Leetcode】2182. 构造限制重复的字符串

文章目录 题目思路代码 题目 2182. 构造限制重复的字符串 问题&#xff1a;给你一个字符串 s 和一个整数 repeatLimit &#xff0c;用 s 中的字符构造一个新字符串 repeatLimitedString &#xff0c;使任何字母 连续 出现的次数都不超过 repeatLimit 次。你不必使用 s 中的全…

汽车专业翻译,如何选择好的翻译公司?

随着中国汽车市场的不断壮大和国际化的步伐加快&#xff0c;众多外国汽车品牌纷纷进军中国市场&#xff0c;与此同时&#xff0c;国内汽车企业也在积极拓展海外版图。在此背景下&#xff0c;汽车企业与国际客户、供应商和合作伙伴的交流日益频繁。因此&#xff0c;拥有一支专业…

个人的感悟观点,即将毕业的应届生的对自己未来方向的思考和认识

目录 复习历程思考 为什么我选择了考研 考完后我的状态 考完后我的做法 我对方向的看法&#xff08;拙见&#xff09; 复习历程思考 自我决定考研复习一刻开始。停更半年之久&#xff0c;甚至更长。没有分享自己的学习。在时常半年多的考研复习的过程中。我决定它带给我希…

传奇手游详细图文架设教程

开始架设 1. 架设条件 传世手游架设需要准备&#xff1a; linux 服务器&#xff0c;建议 CentOs 7.6 版本&#xff0c;游戏源码&#xff0c; 游戏运行大约占 2.5G 左右内存。 2. 安装宝塔及环境 宝塔是一个服务器运维管理软件&#xff0c;安装命令&#xff1a; yum inst…

步进电机相关知识 以及 TMC2660 步进电机驱动芯片驱动步进电机

步进电机相关知识 以及 TMC2660 步进电机驱动芯片驱动步进电机 前言一、步进电机基础知识1、电机常用概念2、步进电机小知识3、步进电机分类4、步进电机工作原理细分驱动步进电机 5、使用的步进电机型号以及相关参数 二、步进电机驱动芯片 TMC2660 和MCU端步进电机驱动芯片TMC2…

jenkins忘记admin密码

jenkins忘记admin密码&#xff0c;重置密码&#xff1a; 1.找打jenkins目录下面的config.xml [rootVM-0-15-centos .jenkins]# find ./* -name config.xml ./config.xml [rootVM-0-15-centos .jenkins]# pwd /root/.jenkins删除下面的这部分内容&#xff1a; [rootVM-0-15-c…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-8 可观测性与分离原理

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-8 可观测性与分离原理