首页 > 其他分享 >RSA对电话号码加解密的工具类

RSA对电话号码加解密的工具类

时间:2024-07-12 16:29:24浏览次数:16  
标签:加密 电话号码 加解密 RSA static str println String

RSA对电话号码加解密的工具类
1.工具类如下


import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;

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


@Slf4j
public class RSAEncryptUtil {

    /**
     *  publicKeyString && privateKeyString  是 后台加密给前台的加密 公私密钥
     */
    public final static String publicKeyString = "DNnYqDYUXlTHpCzW6bUuSYi9LJDNqRkeBsz78U68bfSDNnYqDYUXlTHpCzW6bUu/jBdu3f9nYU5LwVE1qorOy0NrBsDECAwEAAQ==";
    public final static String privateKeyString = "jRFuF+h9EmB9mfrprwBAiEA+51jPBkOZ2WyMFG+rsl5xl09C87v4yliCcPjgReVMekLNbptS7+MF27d/2dhTkvBUTWqis7LQ2sGwMQIDAQABAkBAlv4XLYzlf7WiziYh8pHiL0KRH55cDM8/wp7Ah0ByzMKAtKSBL/+uyDVM8jiag1e99jRFuF+h9EmB9mfrprwBAiEA+51jPBkOZ2WyMFG+rsl5xl09C87v4yliCcPjgdvEj+kCIQDTHhP4Avr2nWRdlWnxUIj9iUggqfEdfCDzAq9ChYf5CQIhANbNxWMQDQDui9G+Z6h2LjTPcoc7MgZfVOf7SKWbBdLJAiBMXlYE4jccXMUAoVrogyR66l0gC7l/2/YjUfZKDvmn2QIgEgOwDb6juF5aolA8/K7noOAZ9vLuMhRu9T8qlllRHCw=";

    /**
     *  publicKeyClientString && privateKeyClientString  是 前台加密给后台的加密 公私密钥
     */
    public final static String publicKeyClientString = "YgZAcBsPD9/g/rx5z5xM5Z9LvZOQe8GqhV1iC+nkTA6PIchCBM4UKijNS1qycu2cv1y4OTKqYYgZAcBsPD9/g/rx5z5xM5Z9LvZOQe8GqhV1icCAwEAAQ==";
    public final static String privateKeyClientString = "RMDo8hyEIEzhQqKM1LWrJy7Zy/XLg5MqphiBkBwGw8P3+D+vHnPnEzln0u9k5B7waqFXWJwIDAQABAkAygcStEAhYZCiY1usyXUL6eRMDo8hyEIEzhQqKM1LWrJy7Zy/XLg5MqphiBkBwGw8P3+D+vHnPnEzln0u9k5B7waqFXWJwIDAQABAkAygcStb1hOX6LRm9rpmT3IB5CcZJLuFz5IPbqzWgJJKBuovoI8NXkuXgRSw/xRPzvicmkEPHRjXATdRFKw1i9BAiEA19ggoZRyL3yhLT+Y4+qAG3W9b+UKcCCteqWP3QUwS/cCIQCeXYqgq1Eq5aHlcBXdOe8kEhqmwSUhbhSBlkTxWhtbUQIgez64Wyq1DHJgYcLXnQQwQ/21vmeMzzuJcueIPs6Qpj8CIDbf6OpVkrGPknLDTQA0U/Ymw89me+xCjZ59qHQNKg+RAiAmKx8HLFE/ejiJwL8sPtSE34yomIlsS23uAX+JXGAy7w==";


    public static void main(String args[]) throws Exception {
        RSAEncryptUtil.genKeyPair();
    }
    /**
     * 随机生成密钥对
     * @throws NoSuchAlgorithmException
     */
    public static void genKeyPair() throws Exception {
//        // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
//        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//        // 初始化密钥对生成器,密钥大小为96-1024位
//        keyPairGen.initialize(512,new SecureRandom());
//        // 生成一个密钥对,保存在keyPair中
//        KeyPair keyPair = keyPairGen.generateKeyPair();
//        // 得到私钥
//        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
//        // 得到公钥
//        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
//        String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
//        // 得到私钥字符串
//        String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
//        // 将公钥和私钥保存到Map
//        //0表示公钥
//        System.out.println(publicKeyString);
//        //1表示私钥
//        System.out.println(privateKeyString);


        //String messageEn = decrypt("Xt702Bm5Mb/y4aS/KrnSZ57gJMkhE8fy2xAkiHx/OZKarEt8QGHeCEuEXKPv9IB8UsDd8nVybHW3Rew8JFQ5dA==");
        //1表示私钥
        //System.out.println(messageEn);

       // String encryptStr = encryptClient("13462458848");
        System.out.println(encrypt("13111111111"));
        System.out.println(decrypt("Xh+ObL4j3mwoat9XCVTJZIXh+ObL4j3mwoat9XCVTJZIkApuSWyS5euy8+ah4rYR1ZrdE"));
        System.out.println(decrypt("sJrS9nO8sJPWC1RLwKguwTqYqtsJrS9nO8sJPWC1RLwKguwTqYqtDsRsJrS9nO8sJPWC1"));
        System.out.println(decrypt("jLz9DtdRnG/SNsulqxc24FfEK8dFjLz9DtdRnG/SNsulqxc24FfNXLxClfn9j/VUm4w=="));
        System.out.println(decrypt("fRPGaVPwnL09n33GGt+3JYFXeKg22mDx2Obkx19zclYr6LoiDuRPGaVPwnL09n3iCnA=="));
        System.out.println(decrypt("KIRCvL6QnUU0309+ymrJIEpdloStzEM0ftZwjPKIRC9+ymrJIEpdloSUjMdhZ42sAAw=="));


        //System.out.println(decryptClient(encryptStr));
        //System.out.println(decrypt(encryptStr));
    }
    /**
     * RSA公钥加密
     * @param str 加密字符串
     * @return 密文
     * @throws Exception 加密过程中的异常信息
     */
    public static String encrypt(String str) throws BusinessException{
        return encryptByPublicKey(str,publicKeyString);
    }

    /**
     * RSA私钥解密
     * @param str 加密字符串
     * @return 铭文
     * @throws Exception 解密过程中的异常信息
     */
    public static String decrypt(String str) throws BusinessException{
        return decryptByPrivateKey(str,privateKeyString);
    }

    /**
     * RSA公钥加密 - 前台给后台
     * @param str 加密字符串
     * @return 密文
     * @throws Exception 加密过程中的异常信息
     */
    public static String encryptClient(String str) throws BusinessException{
        return encryptByPublicKey(str,publicKeyClientString);
    }

    /**
     * RSA私钥解密 - 前台给后台
     * @param str 加密字符串
     * @return 铭文
     * @throws Exception 解密过程中的异常信息
     */
    public static String decryptClient(String str){
        return decryptByPrivateKey(str,privateKeyClientString);
    }


    static String encryptByPublicKey(String str,String publicKey){
        String outStr="";
        try {
            //base64编码的公钥
            byte[] decoded = Base64.decodeBase64(publicKey);
            RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
            //RSA加密
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, pubKey);
            outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
        }catch (Exception e){
            log.error("加密失败",e.getMessage());
            throw new BusinessException("电话号码编码失败");
        }
        return outStr;
    }

    static String decryptByPrivateKey(String str,String privateKey){
        String outStr="";
        try {
            //64位解码加密后的字符串
            byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
            //base64编码的私钥
            byte[] decoded = Base64.decodeBase64(privateKey);
            RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
            //RSA解密
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, priKey);
            outStr = new String(cipher.doFinal(inputByte));
        }catch (Exception e){
            log.error("解密失败",e.getMessage());
            throw new BusinessException("电话号码编码失败");
        }
        return outStr;
    }

}

标签:加密,电话号码,加解密,RSA,static,str,println,String
From: https://blog.csdn.net/hejiefeng111/article/details/140350319

相关文章

  • 代码随想录算法训练营Day22 | Leetcode 77. 组合 | 216.组合总和III | 17.电话号码的
    今日任务77.组合题目链接:https://leetcode.cn/problems/combinations/description/题目描述:CodeclassSolution{vector<vector<int>>ans;vector<int>path;public:vector<vector<int>>combine(intn,intk){//intst......
  • 嵌入式系统中的加解密签名(2)--- mbedtls认识与使用
    笔者来介绍一下mbedtls认识与使用1、mbedtls认识mbedtls(EmbeddedTLS),是嵌入式里面实现的TLS协议,用C语言实现。相关的TLS协议以及加密等知识可以看笔者上一篇文章----嵌入式系统中的加解密签名。基本特点如下图所示:仓库地址:Mbedtls。特点:面向小型嵌入式设备,代码紧凑......
  • The 1st Universal Cup. Stage 15: Hangzhou
    Preface久违的线下训练,结果因为祁神有急事赶回家了就我和徐神两个人打开场就感觉有点不对劲怎么没有签到,然后全程对着几个题红温还想了一堆假算法,最后愉悦暴毙感觉这场题本身质量都挺高的,但最后只写了5个(赛后补了一个),等以后有时间再来补补吧A.TurnontheLight徐神开场一......
  • IDEA社区版搭建Spring工程(04-加载配置文件及加解密)
    SpringMVC加载配置文件的几种方式通过context:property-placeholde实现加载配置文件在springmvc.xml配置文件里加入context相关引用<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:conte......
  • SAP CPI 之使用国密算法实现SM系列算法加解密
    先将国密算法项目打成jar包gmsm-java:国密算法-JAVA版。包含非对称算法SM2、对称算法SM4、摘要算法SM3。还包含传输加解密(SM2+SM3+SM4)、数据库加解密(SM3+SM4)、配置文件加解密(SM3+SM4)的组合使用。(gitee.com)在CPIScriptCollection中导入jar包,选择Upload,选中导入的jar包......
  • AES-CBC模式加解密(Python)
    importbase64try:fromCrypto.CipherimportAESfromCrypto.Util.Paddingimportpad,unpadexceptImportError:print('请安装加解密库pycryptodome')classAesSample(object):def__init__(self):self.key='MbQeThWmZq4t6w9......
  • 对称加密、非对称加密、详解 RSA 非对称加密算法
    文章目录对称加密和非对称加密对称加密非对称加密RSA非对称加密算法RSA算法详细解释RSA算法的使用在其他方面的应用对称加密和非对称加密对称加密和非对称加密是密码学中两种基本的加密技术,它们在加密和解密过程中使用密钥的方式不同,各自有着独特的特性和适用场......
  • java 用bouncycastle 生成pem格式的rsa
    maven pem.xml<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version><!--请根据需要检查最新版本--></dependency> java用bouncyca......
  • 加解密技术原理
    加解密技术概览加解密定义加密:数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,通过这样的途径来达到保护数据不被非法人员窃取、阅读的目的。解密:数据解密的过程就是对密文使用相应的算法和密钥进行解密处理,将密......
  • A LLM-based Controllable, Scalable, Human-Involved User Simulator Framework for
    目录概CSHI(Controllable,Scalable,andHuman-Involved)代码ZhuL.,HuangX.andSangJ.Allm-basedcontrollable,scalable,human-involvedusersimulatorframeworkforconversationalrecommendersystems.2024.概作者利用LLM进行用户模拟,虽然是复杂了一点......