ASC+Base64加密算法 根据用户id生成秘钥

需要是要根据用户的id生成密钥 通过密钥生成免登录链接 实现用户根据链接直接访问系统

标准Base64编码包含特殊字符,会被转义 从而登录失败要使生成的密文不包含特殊字符,您可以使用Base64URL编码代替标准的Base64编码。Base64URL编码使用'-'和'_'替换了标准Base64编码中的'+'和'/',并且省略了末尾的'='。这样就可以避免生成的密文包含特殊字符。

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
 
public class AESUtils {
    public static String encryptLongId(long id, String key) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(String.valueOf(id).getBytes());
        return base64UrlEncode(encryptedBytes);
    }
 
    public static Long decryptLongId(String encryptedId, String key) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(base64UrlDecode(encryptedId));
        return Long.parseLong(new String(decryptedBytes));
    }
 
        public static void main(String[] args) throws Exception {
            for (Long i = 116L; i < 500L; i++) {
                String secretKey = "7987489ABCDEFG";
 
                String encryptedId = encryptLongId(i, secretKey);
                System.out.println("Encrypted ID: " + encryptedId);
 
                Long decryptedId = decryptLongId(encryptedId, secretKey);
                System.out.println("Decrypted ID: " + decryptedId);
            }
    }
    // Base64URL编码
    private static String base64UrlEncode(byte[] bytes) {
        return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
    }
 
    // Base64URL解码
    private static byte[] base64UrlDecode(String str) {
        return Base64.getUrlDecoder().decode(str);
    }
}

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

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

相关文章

Python从原Excel表中抽出数据存入同一文件的新的Sheet(附源码)

python读取excel数据。Python在从原Excel表中抽出数据并存储到同一文件的新的Sheet中的功能&#xff0c;充分展示了其在数据处理和自动化操作方面的强大能力。这一功能不仅简化了数据迁移的过程&#xff0c;还提高了数据处理的效率&#xff0c;为数据分析和管理工作带来了极大的…

图像识别应用

一、图像识别应用 图像识别&#xff0c;是利用机器视觉对图像进行处理、分析和理解&#xff0c;以识别各种不同模式的目标和对象。图像识别在机器视觉工业领域中最典型的应用就是二维码的识别了&#xff0c;二维码就是我们平时常见的条形码中最为普遍的一种。将大量的数据信息存…

Nginx 配置 WebSocket 代理

Nginx 配置 WebSocket 代理 文章目录 Nginx 配置 WebSocket 代理官方文档代理样例 Linux 查看安装文件命令手册Nginx 日志配置方案成功解决问题--使用 Nginx 代理 WebSocket可能出现的问题 Nginx 官方文档网址 nginx documentation ... http:{...server{...# WebSocket代理loc…

诊断慢SQL根源

诊断慢SQL的根源通常涉及一系列步骤和方法&#xff0c;包括但不限于以下几个方面&#xff1a; 1. **收集慢SQL日志**&#xff1a; - 设置数据库系统的慢查询日志阈值&#xff08;如MySQL的long_query_time&#xff09;&#xff0c;记录执行时间超过指定阈值的SQL语句。 …

3.31学习总结

算法 解题思路 使用dfs,对蛋糕每层可能的高度和半径进行穷举.通过观察我们可以知道第一层的圆面积是它上面所有蛋糕层的圆面积之和,所以我们只要去求每层的侧面积就行了. 因为题目要求Ri > Ri1且Hi > Hi1,所以我们可以求出每层的最小体积和侧面积,用两个数组分别储存起来…

C语言实现猜数字游戏(有提示,限制次数版)

这次的猜数字游戏我添加了新的功能&#xff1a;为玩家添加了提示&#xff0c;以及输入数字的限制次数。 首先&#xff0c;我们的猜数字游戏需要一个菜单&#xff0c;来让玩家可以选择玩游戏还是退出游戏&#xff0c;所以我们需要开始就打印一个菜单&#xff1a; int main() {…

Mac air 个人免费版VMWare Fusion安装及配置教程

Mac air 安装免费版VMWare Fusion教程及问题解决 1、下载VMWare Fusion2、下载wins镜像文件3、开始配置4、出现的问题及解决方法4.1 如何跳过启动时的网络连接4.2 启动后&#xff0c;无法连接网络怎么办4.3 怎么实现将文件拖拽到虚拟机中 当你手上是一台Mac电脑&#xff0c;却需…

el-upload上传图片给SpringBoot后端

需求 我的需求是&#xff0c;将上传文件的el-upload放到一个el-form里面&#xff0c;点击保存才提交&#xff0c;所以不能直接用action的方式&#xff0c;下面采用自定义上传的方式来完成Vue前端 主要是使用editForm.imgList来保存图片的信息&#xff0c;注意这里是一个对象&am…

VS Code常用前端开发插件和基础配置

VS Code插件安装 VS Code提供了非常丰富的插件功能&#xff0c;根据你的需要&#xff0c;安装对应的插件可以大大提高开发效率。 完成前端开发&#xff0c;常见插件介绍&#xff1a; 1、Chinese (Simplified) Language Pack 适用于 VS Code 的中文&#xff08;简体&#xff…

【原创】基于分位数回归的卷积长短期结合注意力机制的神经网络(CNN-QRLSTM-Attention)回归预测的MATLAB实现

基于分位数回归的卷积长短期结合注意力机制的神经网络&#xff08;CNN-QRLSTM-Attention&#xff09;是一种用于时间序列数据预测的深度学习模型。该模型结合了卷积神经网络&#xff08;CNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;和注意力机制&#xff08;A…

小白用Windows(ssh)连接使用 ubuntu(虚拟机)

安装ssh sudo apt install openssh-server 添加用户、密码 sudo useradd fly sudo passwd fly sudo adduser fly sudo 免密登入 [windows 生成密钥&#xff1a;ssh-keygen -t rsa -b 4096 cat ~/.ssh/id_rsa.pub | ssh fly192.168.23.133 "mkdir -p ~/.ssh…

C# 文件

FileStream 类FileModeFileAccessFileShare StreamReader 类和StreamWriter类StreamReader 类StreamWriter类关于using FileStream 类 FileStream <object_name> new FileStream( <file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <…

数据治理-平台详细措施

这里讲平台治理的具体措施&#xff0c;并不是从具体架构来说&#xff0c;而是从详细方法。 名词定义 1.待治理成本 2.浪费量&#xff1a;可以优化计算或者存储 3.累计浪费量&#xff1a;发现时距离今天数*当日浪费量 4.节省成本&#xff1a;完成治理成本 5.白名单管理成本 治理…

C++ 数组 结构编程题

一 求100以内的所有素数 /* * 需要标记2~100 之间的数是否处理 * 用数组&#xff0c;初始为0 表示都是素数&#xff0c;如果 判断为合数则置为1过用 */ #include<stdio.h> #include<math.h> int main() {const int n 100;int isPrim[n 1] { 0 };int i, j;for (…

MAC的Safari浏览器没有声音解决办法

有一段时间没打开电脑&#xff0c;也不知道是系统自动更新或是什么缘故&#xff0c;所有浏览器都无法正常发声。 现象如下&#xff1a; 首先&#xff0c;Safari浏览器无法自动播放声音&#xff0c;下载的360浏览器现象一致&#xff0c;但是播放其他音乐播放软件和视频软件都正…

【开发工具】Ubuntu复制CSDN代码多余符号的去除

在Ubuntu中使用CSDN复制的代码时&#xff0c;可能会出现\u200的符号&#xff0c;这个符号会影响代码的编译和运行&#xff0c;因此需要找到一种快速删除这种符号的方法。 通过搜索找到了一种替换为空的删除方式&#xff0c;笔者编写了一个适用于Rust的shell脚本&#xff0c;需要…

JavaScript(二)---【js数组、js对象、this指针】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 一.js数组 在js中也有数组的概念&#xff0c;数组使用“[]”定义&#xff0c;其中数组中还可以嵌套数组从而达到多层数组的作用。 访问数组中的某个元素&#xff0c;我们可以直…

pymysql使用记录

最近由于需要来学习一下pymysql。 先来认识一下pymysql&#xff1a; PyMySQL 是 Python 中一个用于连接 MySQL 数据库的库。它允许 Python 程序通过简单的 API 调用来连接、操作和管理 MySQL 数据库。PyMySQL 是在 Python 中使用纯 Python 编写的&#xff0c;因此它可以在几…

一些常见的MySQL问题和答案

什么是MySQL&#xff1f;MySQL的存储引擎有哪些&#xff1f;它们有什么区别&#xff1f; MySQL是一个开源的关系型数据库管理系统&#xff0c;用于存储和管理大量结构化数据。 MySQL的存储引擎包括InnoDB、MyISAM、Memory等。它们在事务支持、并发性能、数据完整性等方面有所不…

MySQL编程实战LeetCode经典考题

文章简介 本文主要收集了LeetCode上关于MySQL的一些经典考题。 后续也会陆续把所有经典考题补充完整。 175.组合两个表 175.组合两个表 解答&#xff1a; select p.FirstName as firstName, p.LastName as lastName,a.City as city, a.State as state from Person p l…