【精品】将两个字符串进行加密和解密的Java工具类

news2024/12/24 0:28:27

原理

使用一个分隔符将两个字符串连接在一起,并对连接后的字符串进行加密。加密过程中,首先生成一个随机下标列表,然后根据随机下标打乱字符串的顺序,并使用Base64进行编码。解密过程中,根据之前生成的随机下标列表将字符串还原,并使用Base64进行解码,最后根据分隔符将字符串拆分为原始的两个字符串。

工具类

public class TwoStringMergeEncodeDecodeUtil {
/**
* 分隔符
/
private static String delimiter = “#”;
/
*
* 存放生成的随机下标
*/
private static List randIndex = new ArrayList<>();

/**
 * 加密
 * @param str1
 * @param str2
 * @return
 */
public static String encode(String str1, String str2) {
    final String str = str1 + delimiter + str2;
    final int length = str.length();

    //生成随机下标
    randIndex = genRangedDigit(0, length - 1);

    String res = "";
    for (int i = 0; i < length; i++) {
        res += str.charAt(randIndex.get(i));
    }
    return Base64Util.encode(res);
}

/**
 * 解密
 * @param str
 * @return
 */
public static String[] decode(String str) {
    //解密
    str = Base64Util.decode(str);
    int length = str.length();

    //存放随机下标列表的顺序
    List<Integer> index = new ArrayList<>(length);

    for (int i = 0; i < length; i++) {
        for (int j = 0; j < length; j++) {
            if (i == randIndex.get(j)) {
                index.add(j);
            }
        }
    }

    String str0 = "";
    for (int i = 0; i < length; i++) {
        str0 += str.charAt(index.get(i));
    }
    return str0.split(delimiter);
}

/**
 * 产生[m,n]之间的n-m+1个随机数
 * @param m
 * @param n
 * @return
 */
private static List<Integer> genRangedDigit(Integer m, Integer n) {
    List<Integer> res = new ArrayList<>(n - m + 1);
    final Random random = new Random();
    int count = 0;
    while (count < n - m + 1) {
        int digit = random.nextInt(n - m + 1) + m;
        if (!res.contains(digit)) {
            res.add(digit);
            count++;
        }
    }
    return res;
}

}

测试代码

    public static void main(String[] args) {
        String str1 = "wq83PPtsQ0TZfy4qGF4mTZfy4qGF4m";
        String str2 = "97803cc06467f95e4748ca52d7fd74e4934904e697c3889d";
        final String encode = encode(str1, str2);
        System.out.println(encode);
        final String[] decode = decode(encode);
        System.out.println(decode[0]);
        System.out.println(decode[1]);
        System.out.println(decode[0].equalsIgnoreCase(str1));
        System.out.println(decode[1].equalsIgnoreCase(str2));
    }

结果:
在这里插入图片描述

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

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

相关文章

Definition and properties of the Gamma function

See https://math.libretexts.org/Bookshelves/Analysis/Complex_Variables_with_Applications_(Orloff)/14%3A_Analytic_Continuation_and_the_Gamma_Function/14.02%3A_Definition_and_properties_of_the_Gamma_function 勒让德倍元公式&#xff08;Legendre duplication fo…

无涯教程-JavaScript - N函数

描述 N函数返回一个转换为数字的值。 语法 N (value) 争论 Argument描述Required/OptionalValue 要转换的值或对值的引用。 N转换下表中列出的值。 Required 值 N的返回值一个数字那个数字日期,采用Microsoft Excel中可用的内置日期格式之一该日期的序列号 TRUE 1 FALSE…

微视网媒:新媒体时代的宣传与营销新范式

随着数字科技的快速发展&#xff0c;新媒体已经成为了现代社会中不可或缺的一部分。其中&#xff0c;微视网媒作为新兴的网络媒体形态&#xff0c;正在改变着传统的宣传和营销模式&#xff0c;为企业和个人提供了全新的推广平台。本文将对微视网媒的优势、应用场景以及案例进行…

免费开箱即用的微鳄任务管理系统

编者按&#xff1a;基于天翎低代码平台实现的微鳄365任务管理系统&#xff0c;包括有发起任务、重点关注、日程、项目管理等功能&#xff0c;支持私有化部署&#xff0c;免费开箱即用。任务管理系统是组织工作中不可或缺的工具&#xff0c;可以提高工作效率、促进协作、增强任务…

GTS 中testPeakPssOfAllApps fail 详解

0. 前言 GTS 在测试 case armeabi-v7a GtsMemoryHostTestCases 的时候出现下面异常&#xff0c;本文总结一下。 com.google.android.memory.gts.AllAppsMemoryHostTest#testPeakPssOfAllApps 1. error log 09-14 10:16:34 I/TestFailureListener: FailureListener.testFaile…

第十届IEEE电气工程与自动化国际学术论坛(IFEEA 2023)

第十届IEEE电气工程与自动化国际学术论坛&#xff08;IFEEA 2023&#xff09; 2023 10th International Forum on Electrical Engineering and Automation IFEEA论坛属一年一度的国际学术盛会。因其影响力及重要性&#xff0c;IFEEA论坛自创建筹办以来&#xff0c;便受到国内…

【React】面试题5题

1. 说说你对 dangerouslySetInnerHTML 的理解 dangerouslySetInnerHTML是React中的一个属性&#xff0c;用于将HTML代码作为字符串直接插入到组件中的DOM元素中。它可以用来动态地生成HTML内容&#xff0c;但同时也带来了一些潜在的安全风险。 使用dangerouslySetInnerHTML时…

函数递归详解

前言&#xff1a; 函数递归是一种算法&#xff0c;递归是通过将问题分解为更小的子问题来解决问题的办法&#xff0c;递归的优点如下&#xff1a; 简洁性&#xff1a;递归可以用较少的代码实现复杂的功能灵活性&#xff1a;递归可以应对未知深度的数据结构&#xff0c;因为它不…

Spring MVC 中的数据绑定和验证机制是什么,如何使用

在 Spring MVC 应用中&#xff0c;数据绑定和验证是非常重要的一部分&#xff0c;它们可以帮助我们将用户提交的数据绑定到 Java 对象上&#xff0c;并对数据进行验证&#xff0c;保证数据的正确性和可靠性。在 Spring MVC 中&#xff0c;数据绑定和验证机制都是通过注解来实现…

Unity 课时 4 : No.4 模拟面试题

课时 4 : No.4 模拟面试题 C# 1. 请说明字符串中 string str null string str “” string str string.Empty 三者的区别 第一个未作初始化没有值, 第二个为空字符串, 答案&#xff1a; str null 在堆中没有分配内存地址 str "" 和 string.Empty 一样都是…

CentOS7 yum安装报错:“Could not resolve host: mirrorlist.centos.org; Unknown error“

虚拟机通过yum安装东西的时候弹出这个错误&#xff1a; 1、查看安装在本机的网卡 网卡ens33处于disconnected的状态 nmcli d2、输入命令&#xff1a; nmtui3、选择网卡&#xff0c;然后点击edit 4、移动到Automatically connect按空格键选择&#xff0c;然后移动到OK键按空格…

Win7 IIS7解析漏洞复现

一、漏洞说明 文件上传使用白名单做限制&#xff0c;只能上传图片文件&#xff0c;导致脚本文件无法上传&#xff0c;上传图片马绕过白名单文件上传的验证&#xff0c;但是图片马又无法解析&#xff0c;利用IIS7.5文件解析漏洞的特点&#xff1a;任意文件名/任意文件名.php&…

华为云云耀云服务器L实例评测 | Linux系统宝塔运维部署H5游戏

文章目录 前言一、云服务器相对传统服务器有什么优势1.1、可伸缩性&#xff08;Scalability&#xff09;1.2、灵活性&#xff08;Flexibility&#xff09;1.3、高可用性&#xff08;High Availability&#xff09;1.4、备份和恢复&#xff08;Backup and Recovery&#xff09;1…

SVN学习笔记--如何 Merge 分支?保姆级教学,带图片手把手实操。

目录 前言实例具体步骤总结 前言 由于项目中有多个分支&#xff0c;如果修改了一处代码&#xff0c;可能需要保证分支和主分支代码一样&#xff0c;所以需要利用 SVN Merge 代码。 实例 现在有两个分支 一个 trunk&#xff1a;主分支一个 develop&#xff1a;开发分支 我们…

数学实验-迭代(Mathematica实现)

一、实验名称&#xff1a;迭代 二、实验环境&#xff1a;Mathematica 10.3软件 三、实验目的&#xff1a;本实验通过Mathematica 10.3软件利用迭代求解方程的近似解&#xff0c;了解迭代方法在解决问题的收敛速度的异同&#xff0c;认识到函数的迭代是数学研究中的一个非常重…

PHPword setImageValue 设置高度不生效

phpword 版本 "phpoffice/phpword": "^0.18.3 我正在使用这个代码&#xff0c;使用模板&#xff0c;写入动态图片&#xff0c;但问题是图像的大小太小&#xff0c;我需要增加高度和宽度 模板文件 如下 问题写法&#xff1a; $file_name "简历";…

UWB学习——day4

UWB学习——day4 技术劣势技术细节UWB频段系统调制方式UWB帧结构芯片实例 技术劣势 干扰其它技术&#xff0c;UWB技术目前允许在未授权的3.1 GHz至10.6 GHz频谱上运行&#xff0c;但该频谱上有许多其它无线通讯所在的频带&#xff0c;容易互相产生干扰&#xff0c;反而限制了适…

基因型数据VCF转EXCEL亲测好用

import pandas as pd df pd.read_csv(shuju.vcf, sep\t, comment#, headerNone,encodingutf-8) df.to_excel(outputFile2.xlsx, indexFalse,encodingutf-8) 以上就是转成功的截图&#xff0c;需要注意的是一定要写入编码方式&#xff0c;UTF-8 &#xff0c;第一次我没有写编码…

实景无人直播系统哪个最好用?呆头鹅无人直播系统

软件图片素材来自于公众号&#xff1a;生财风暴 关注进行领取价值1000元的采集软件&#xff0c;和呆头鹅批量剪辑和矩阵管理系统演示 在未来&#xff0c;想要低成本在人工智能领域创业&#xff0c;其实很简单&#xff0c;如果你是想要低成本创业的人&#xff0c;那么请一定要把…

leetcode 1222. 可以攻击国王的皇后(每日一题)

1222. 可以攻击国王的皇后 在一个 8x8 的棋盘上&#xff0c;放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 queens &#xff0c;表示黑皇后的位置&#xff1b;以及一对坐标 king &#xff0c;表示白国王的位置&#xff0c;返回所有可以攻击国王的皇后的…