输入为一组4字节的数据,输出为一组5字节的数据加密算法匹配美国通用加密算法

加密算法匹配:
* 输入为一组4字节的数据,输出为一组5字节的数据(其中第一个字节固定不变,其他4个字节可变),
* 匹配所使用的加密算法,可随时提供数据样本。
* 注:相关产品为美国公司生产,可考虑美国通用加密算法
* 深入了解加密算法

 

package controller.com.codermart.controller;import controller.com.codermart.controller.Util.MD5Utils;import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;/*** Created by wanzhongLiao on 2023/10/3.*/
public class MainController {public static void main(String[] args){String hell = encodeStr("kell");System.out.println(hell);}/*** 加密算法匹配:* 输入为一组4字节的数据,输出为一组5字节的数据(其中第一个字节固定不变,其他4个字节可变),* 匹配所使用的加密算法,可随时提供数据样本。* 注:相关产品为美国公司生产,可考虑美国通用加密算法* 深入了解加密算法* @param srcStr* @return*/public static String encodeStr(String srcStr){if(srcStr==null){return null;}if(srcStr.isEmpty()){return null;}int length = srcStr.length();if(length<1 || length>4){return null;}String md5 = MD5Utils.MD5(srcStr);char c = srcStr.charAt(0);StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(c);Random random = new Random();for (int i = 0; i < md5.length(); i++) {int randomIndex=random.nextInt(md5.length());char c1 = md5.charAt(randomIndex);stringBuilder.append(c1);if (stringBuilder.toString().length()==5){break;}}return stringBuilder.toString();}public static final byte[] computeMD5(byte[] content) {try {MessageDigest md5 = MessageDigest.getInstance("MD5");return md5.digest(content);} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}
}
package controller.com.codermart.controller.Util;import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** MD5加密/验证工具类**/
public class MD5Utils {static final char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};static final char hexDigitsLower[] = { '0', '1', '2', '3', '4', '5', '6', '7','8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };/***   对字符串 MD5 无盐值加密** @param plainText* 		传入要加密的字符串* @return*  	MD5加密后生成32位(小写字母+数字)字符串*/public static String MD5Lower(String plainText) {try {// 获得MD5摘要算法的 MessageDigest 对象MessageDigest md = MessageDigest.getInstance("MD5");// 使用指定的字节更新摘要md.update(plainText.getBytes());// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值。1 固定值return new BigInteger(1,  md.digest()).toString(16);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/***  对字符串 MD5 加密** @param plainText* 		传入要加密的字符串* @return* 		MD5加密后生成32位(大写字母+数字)字符串*/public static String MD5Upper(String plainText) {try {// 获得MD5摘要算法的 MessageDigest 对象MessageDigest md = MessageDigest.getInstance("MD5");// 使用指定的字节更新摘要md.update(plainText.getBytes());// 获得密文byte[] mdResult = md.digest();// 把密文转换成十六进制的字符串形式int j = mdResult.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = mdResult[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];// 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换}return new String(str);} catch (Exception e) {e.printStackTrace();return null;}}/***   对字符串 MD5 加盐值加密** @param plainText* 		传入要加密的字符串* @param saltValue* 		传入要加的盐值* @return*  	MD5加密后生成32位(小写字母+数字)字符串*/public static String MD5Lower(String plainText, String saltValue) {try {// 获得MD5摘要算法的 MessageDigest 对象MessageDigest md = MessageDigest.getInstance("MD5");// 使用指定的字节更新摘要md.update(plainText.getBytes());md.update(saltValue.getBytes());// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值。1 固定值return new BigInteger(1,  md.digest()).toString(16);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/***   对字符串 MD5 加盐值加密** @param plainText* 		传入要加密的字符串* @param saltValue* 		传入要加的盐值* @return*  	MD5加密后生成32位(大写字母+数字)字符串*/public static String MD5Upper(String plainText, String saltValue) {try {// 获得MD5摘要算法的 MessageDigest 对象MessageDigest md = MessageDigest.getInstance("MD5");// 使用指定的字节更新摘要md.update(plainText.getBytes());md.update(saltValue.getBytes());// 获得密文byte[] mdResult = md.digest();// 把密文转换成十六进制的字符串形式int j = mdResult.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = mdResult[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];str[k++] = hexDigits[byte0 & 0xf];}return new String(str);} catch (Exception e) {e.printStackTrace();return null;}}/***  MD5加密后生成32位(小写字母+数字)字符串*    同 MD5Lower() 一样*/public final static String MD5(String plainText) {try {MessageDigest mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(plainText.getBytes("UTF-8"));byte[] md = mdTemp.digest();int j = md.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = md[i];str[k++] = hexDigitsLower[byte0 >>> 4 & 0xf];str[k++] = hexDigitsLower[byte0 & 0xf];}return new String(str);} catch (Exception e) {return null;}}/***  校验MD5码** @param text*      	要校验的字符串* @param md5*            md5值* @return 校验结果*/public static boolean valid(String text, String md5) {return md5.equals(MD5(text)) || md5.equals(MD5(text).toUpperCase());}/*** 测试* @param args*/public static void main(String[] args) {String plainText = "admin";String saltValue = "admin123";System.out.println(MD5Lower(plainText));System.out.println(MD5Upper(plainText));System.out.println(MD5Lower(plainText, saltValue));System.out.println(MD5Upper(plainText, saltValue));System.out.println(MD5(plainText));System.out.println("=====校验结果======");System.out.println(valid(plainText,MD5(plainText)));}
}

 

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

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

相关文章

星宿UI2.4资源付费变现小程序源码 支持流量主

第一个小程序为星宿小程序 目前是最新版2.0 搭建星宿需要&#xff1a;备用域名 服务器 微信小程序账号 功能&#xff1a;文章展示 文章分类 资源链接下载 轮播图 直接下载附件功能 很多 很适合做资源类分享 源码下载&#xff1a;https://download.csdn.net/download/m0_6604…

mysql面试题17:MySQL引擎InnoDB与MyISAM的区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL引擎InnoDB与MyISAM的区别 InnoDB和MyISAM是MySQL中两种常见的存储引擎,它们在功能和性能方面有一些区别。下面将详细介绍它们之间的差异。…

【算法导论】线性时间排序(计数排序、基数排序、桶排序)

引言&#xff1a;   在排序的最终结果中&#xff0c;各元素的次序依赖于它们之间的比较&#xff0c;我们把这类排序算法称为比较排序&#xff0c;对于包含n个元素的输入序列来说&#xff0c;任何比较排序在最坏情况下都要经过 Ω ( n l g n ) \Omega(nlgn) Ω(nlgn)次比较&a…

学信息系统项目管理师第4版系列17_干系人管理

1. 项目经理和团队管理干系人的能力决定着项目的成败 2. 干系人满意度应作为项目目标加以识别和管理 3. 发展趋势和新兴实践 3.1. 识别所有干系人&#xff0c;而非在限定范围内 3.2. 确保所有团队成员都涉及引导干系人参与的活 3.3. 定期审查干系人群体&#xff0c;可与单…

星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫

系列文章目录 星际争霸之小霸王之小蜜蜂&#xff08;十五&#xff09;--剧将终场 星际争霸之小霸王之小蜜蜂&#xff08;十四&#xff09;--资本家的眼泪 星际争霸之小霸王之小蜜蜂&#xff08;十三&#xff09;--接着奏乐接着舞 星际争霸之小霸王之小蜜蜂&#xff08;十二…

Lucene学习总结之Lucene的索引文件格式

当我们真正进入到Lucene源代码之中的时候&#xff0c;我们会发现: Lucene的索引过程&#xff0c;就是按照全文检索的基本过程&#xff0c;将倒排表写成此文件格式的过程。Lucene的搜索过程&#xff0c;就是按照此文件格式将索引进去的信息读出来&#xff0c;然后计算每篇文档打…

Android开源 Skeleton 骨架屏 V1.3.0

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、新增 “块”骨架屏 1、bind方法更改和变化&#xff1a; 2、load方法更改和变化&#xff1a; 五、关于上一个版本 一、简介 骨架屏的作用是在网络请求较慢时&#xff0c;提供基础占位&…

Android LitePal byte[]类型字段不被创建

我创建了以下实体类&#xff0c;主要是用户分享的内容、分享的照片、分享的标题&#xff0c;然后百度了一下LitePal可以识别byte[]&#xff0c;因为需要文件的上传与读取&#xff1a; public class Context extends LitePalSupport {private Integer ContextId;private String…

LLMs 用强化学习进行微调 RLHF: Fine-tuning with reinforcement learning

让我们把一切都整合在一起&#xff0c;看看您将如何在强化学习过程中使用奖励模型来更新LLM的权重&#xff0c;并生成与人对齐的模型。请记住&#xff0c;您希望从已经在您感兴趣的任务上表现良好的模型开始。您将努力使指导发现您的LLM对齐。首先&#xff0c;您将从提示数据集…

用向量数据库Milvus Cloud 搭建AI聊天机器人

加入大语言模型(LLM) 接着,需要在聊天机器人中加入 LLM。这样,用户就可以和聊天机器人开展对话了。本示例中,我们将使用 OpenAI ChatGPT 背后的模型服务:GPT-3.5。 聊天记录 为了使 LLM 回答更准确,我们需要存储用户和机器人的聊天记录,并在查询时调用这些记录,可以用…

软件设计模式系列之二十五——访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;是一种强大的行为型设计模式&#xff0c;它允许你在不改变被访问对象的类的前提下&#xff0c;定义新的操作和行为。本文将详细介绍访问者模式&#xff0c;包括其定义、举例说明、结构、实现步骤、Java代码实现、典型应用场景…

软件工程从理论到实践客观题汇总(头歌第九章至第十七章)

九、软件体系结构设计 1、软件体系结构设计概述 2、软件体系结构模型的表示方法 3、软件体系结构设计过程 4、设计初步的软件体系结构 5、重用已有软件资源 6、精化软件体系结构 7、设计软件部署模型 8、文档化和评审软件体系结构设计 十、软件用户界面设计 1、用户界面设计概…

Ae 效果:CC Page Turn

扭曲/CC Page Turn Distort/CC Page Turn CC Page Turn &#xff08;CC 翻页&#xff09;主要用于模拟书页翻动的效果。通过使用该效果&#xff0c;用户可以创建出像书页或杂志页面翻动的视觉效果&#xff0c;增强影片的交互性和视觉吸引力。 ◆ ◆ ◆ 效果属性说明 Contro…

Is This The Intelligent Model(这是智能模型吗)

Is This The Intelligent Model 这是智能模型吗 Ruoqi Sun Academy of Military Science Defense Innovation Institute, Beijing, 100091, China E-mail: ruoqisun7163.com The exposed models are called artificial intelligent models[1-3]. These models rely on knowled…

第2篇 机器学习基础 —(1)机器学习方式及分类、回归

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习是一种人工智能的分支&#xff0c;它使用算法和数学模型来使计算机系统能够从经验数据中学习和改进&#xff0c;而无需显式地编程。机器学习的目标是通过从数据中发现模式和规律&#xff0c;从而使计算机能够自动进…

Leetcode 231.2的幂

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…

【重拾C语言】二、顺序程序设计(基本符号、数据、语句、表达式、顺序控制结构、数据类型、输入/输出操作)

目录 前言 二、顺序程序设计 2.1 求绿化带面积——简单程序 2.2基本符号&#xff1a; 2.2.1 字符集 可视字符 不可视字符 2.2.2 C特定符 关键字 分隔符 运算符 2.2.3 标识符 2.2.4 间隔符 2.2.5 注释 2.3 数据 2.3.1 字面常量&#xff08;Literal Constants&am…

【RP-RV1126】烧录固件使用记录

文章目录 烧录完整固件进入MASKROM模式固件烧录升级中&#xff1a;升级完成&#xff1a; 烧录部分进入Loader模式选择文件切换loader模式 烧录完整固件 完整固件就是update.img包含了所有的部件&#xff0c;烧录后可以直接运行。 全局编译&#xff1a;./build.sh all生成固件…

SDL2绘制ffmpeg解析的mp4文件

文章目录 1.FFMPEG利用命令行将mp4转yuv4202.ffmpeg将mp4解析为yuv数据2.1 核心api: 3.SDL2进行yuv绘制到屏幕3.1 核心api 4.完整代码5.效果展示 本项目采用生产者消费者模型&#xff0c;生产者线程&#xff1a;使用ffmpeg将mp4格式数据解析为yuv的帧&#xff0c;消费者线程&am…

单层神经网络

神经网络 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09;&#xff0c;简称神经网络&#xff08;Neural Network&#xff0c;NN&#xff09;&#xff0c;是一种模仿生物神经网络的结构和功能的数学模型或计算模型。1943年&#xff0c;McCulloc…