加密算法(二)
1、SHA-256加密算法:
package com.arithmetic.encryption;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
//使用java.security.MessageDigest类来进行SHA-256摘要的计算。
//通过getInstance("SHA-256")方法获取SHA-256摘要的实例。
//将要进行摘要计算的密码作为字节数组传递给digest()方法来计算消息摘要。
//将摘要转换为十六进制字符串输出。
//实际应用中,还需要考虑密码的安全存储、密码强度要求等。
public class SHA256ExampleDemo {public static void main(String[] args) {String password = "mypassword";try {// 创建SHA-256摘要MessageDigest md = MessageDigest.getInstance("SHA-256");// 计算消息摘要byte[] hash = md.digest(password.getBytes());// 将摘要转换为十六进制字符串StringBuilder sb = new StringBuilder();for (byte b : hash) {sb.append(String.format("%02x", b));}String hashHex = sb.toString();System.out.println("SHA-256摘要值:" + hashHex);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}
}
2、加强型SHA-256加密算法:
package com.arithmetic.encryption;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
//使用SHA-256算法对密码进行加密,并添加了随机盐值和迭代计算的步骤。
//运行代码,将在控制台打印出经过加密处理的密码。
//实际使用中需要根据具体需求进行适当的修改和补充。
public class SHA256PasswordHashingExampleAdd {public static void main(String[] args) {String password = "1297+mypasswo!rdvdhajifr";byte[] salt = generateSalt();byte[] hashedPassword = hashPassword(password, salt);System.out.println("Hashed Password: " + bytesToHex(hashedPassword));}//迭代计算摘要:将密码进行多次迭代计算摘要,这样可以增加密码破解的时间和计算成本。private static byte[] generateSalt() {SecureRandom random = new SecureRandom();byte[] salt = new byte[16];random.nextBytes(salt);return salt;}private static byte[] hashPassword(String password, byte[] salt) {try {MessageDigest md = MessageDigest.getInstance("SHA-256");byte[] saltedPassword = new byte[password.getBytes().length + salt.length];System.arraycopy(password.getBytes(), 0, saltedPassword, 0, password.getBytes().length);System.arraycopy(salt, 0, saltedPassword, password.getBytes().length, salt.length);md.update(saltedPassword);byte[] hash = md.digest();for (int i = 0; i < 10000; i++) {md.reset();hash = md.digest(hash);}return hash;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}private static String bytesToHex(byte[] bytes) {StringBuilder hexString = new StringBuilder();for (byte b : bytes) {String hex = Integer.toHexString(0xFF & b);if (hex.length() == 1) {hexString.append('0');}hexString.append(hex);}return hexString.toString();}
}
3、SHA-512加密算法:
package com.arithmetic.encryption;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
//定义一个input变量来保存要进行SHA-512哈希的输入,然后调用getSHA512方法来获取SHA-512哈希结果,并打印输出。
//在getSHA512方法中,使用MessageDigest类来获取SHA-512算法的实例,然后调用digest方法计算输入的哈希值。
//最后,将哈希值转换为16进制字符串并返回。如果算法不支持或者发生异常,将返回null。
public class SHA512ExampleDemo {public static void main(String[] args) {String input = "Hello World";String sha512 = getSHA512(input);System.out.println("SHA-512 hash: " + sha512);}private static String getSHA512(String input) {try {MessageDigest md = MessageDigest.getInstance("SHA-512");byte[] messageDigest = md.digest(input.getBytes());StringBuilder sb = new StringBuilder();for (byte b : messageDigest) {sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));}return sb.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}
}
4、加强型SHA-512加密算法:
package com.arithmetic.encryption;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
//在实际应用中,存储密码或敏感数据时应该使用更安全的方法,例如使用安全的哈希函数库或加密算法库,且需要注意密码的传输和存储的安全性。
//请根据实际需求进行适当的修改和改进。//要加强SHA-512算法的安全性,可以采取以下措施://使用随机盐值:在计算SHA-512哈希值之前,先生成一个随机的盐值。
//将盐值与输入字符串进行组合,然后再计算哈希值。这样做可以增加哈希的强度和安全性,防止彩虹表等攻击。
//迭代计算:多次迭代计算哈希值,每次将前一次的哈希值与输入字符串进行组合。
//这样做可以增加计算哈希值的时间和资源成本,防止暴力破解攻击。
//使用加密密钥:使用一个加密密钥对输入字符串进行加密,然后再计算哈希值。
//只有在使用正确的密钥解密后,才能得到正确的输入字符串。这样可以防止对哈希值进行重放攻击。
//使用更长的输出长度:SHA-512算法默认的输出长度是512位,可以使用更长的输出长度来增加哈希值的长度,提高安全性。
//定期更新哈希算法:定期更新SHA-512算法,使用更新版本的算法库或升级到更安全的哈希算法。
//这可以确保使用的哈希算法是最新、最安全的。
//这些措施并不能完全保证SHA-512算法的安全性,它们只能增加攻击者破解哈希值的难度。
//实际应用中,根据具体的安全需求和架构选择合适的加固措施,并且持续关注最新的密码学发展和安全威胁。public class SHA512EnhancedAddDemo {public static void main(String[] args) throws NoSuchAlgorithmException {// 生成随机的盐值SecureRandom random = new SecureRandom();byte[] salt = new byte[16]; // 根据需要设置盐值的长度random.nextBytes(salt);// 将盐值与输入字符串进行组合String input = "yourInputString";byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);byte[] saltedInputBytes = new byte[salt.length + inputBytes.length];System.arraycopy(salt, 0, saltedInputBytes, 0, salt.length);System.arraycopy(inputBytes, 0, saltedInputBytes, salt.length, inputBytes.length);// 计算SHA-512哈希值MessageDigest digest = MessageDigest.getInstance("SHA-512");byte[] hash = digest.digest(saltedInputBytes);// 打印盐值和哈希值System.out.println("Salt: " + bytesToHex(salt));System.out.println("Hash: " + bytesToHex(hash));// 使用迭代计算int iterations = 10000; // 设置迭代次数byte[] hashedBytes = saltedInputBytes;for (int i = 0; i < iterations; i++) {hashedBytes = digest.digest(hashedBytes);}// 打印迭代计算后的哈希值System.out.println("Iterated Hash: " + bytesToHex(hashedBytes));// 使用加密密钥String keyString = "yourEncryptionKey";byte[] keyBytes = keyString.getBytes(StandardCharsets.UTF_8);byte[] validKeyBytes = Arrays.copyOf(keyBytes, 16); // 将密钥长度调整为16字节SecretKeySpec keySpec = new SecretKeySpec(validKeyBytes, "AES");Cipher cipher;try {cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, keySpec);byte[] encryptedBytes = cipher.doFinal(inputBytes);// 计算哈希值hash = digest.digest(encryptedBytes);// 打印加密后的哈希值System.out.println("Encrypted Hash: " + bytesToHex(hash));} catch (Exception e) {e.printStackTrace();}}// 将字节数组转换为十六进制表示的字符串private static String bytesToHex(byte[] bytes) {StringBuilder result = new StringBuilder();for (byte b : bytes) {result.append(String.format("%02x", b));}return result.toString();}}
相关文章:
加密算法(二)
1、SHA-256加密算法: package com.arithmetic.encryption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; //使用java.security.MessageDigest类来进行SHA-256摘要的计算。 //通过getInstance("SHA-256")方法获取…...
大创项目推荐 深度学习 YOLO 实现车牌识别算法
文章目录 0 前言1 课题介绍2 算法简介2.1网络架构 3 数据准备4 模型训练5 实现效果5.1 图片识别效果5.2视频识别效果 6 部分关键代码7 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 该项目较…...
IP知识详解
IP基本认识 IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。 网络层与数据链路层有什么关系呢? IP 的作用是主机之间通信…...
设计模式:适配器模式
定义 适配器模式(Adapter Pattern),也称为包装器(Wrapper)模式,是一种结构型设计模式,它允许不兼容的接口之间进行交互。适配器模式通过包装一个已有的类,提供一个与原系统兼容的接…...
大语言模型落地的关键技术:RAG
1、什么是RAG? RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索ÿ…...
ffmpeg Android 笔记
目录 没有示例项目 编译好的.a文件 ffmpegandroid 延时有220ms rk官方有例子 ffmpeg Android 笔记 没有示例项目 编译好的.a文件 FFmpeg-Android/ffmpeg-android-aarch64-34/lib at main yhbsh/FFmpeg-Android GitHub ffmpegandroid 看到了音频解码器 FFmpegAndroid/a…...
本地创建新分支并提交gitee
初始化本地仓库 git init链接远程仓库 git remote add origin https://gitee.com/xxxxxxxxxxx提交本地代码(进行commit提交) git add . git commit -m "分支名"创建分支 git branch 分支名选择刚刚创建的分支 git checkout 分支名查看所选中的分支 git branch …...
[蓝桥杯 2019 国 C] 数正方形
[蓝桥杯 2019 国 C] 数正方形 题目描述 在一个 N N N \times N NN 的点阵上,取其中 4 4 4 个点恰好组成一个正方形的 4 4 4 个顶点,一共有多少种不同的取法? 由于结果可能非常大,你只需要输出模 1 0 9 7 10^9 7 1097 的…...
Redis: 配置文件详解(Redis.conf)
文章目录 一、Units二、INCLUDES三、NETWORK四、GENERAL五、SECURITY六、LIMITS 一、Units 单位,配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小写不敏感 二、INCLUDES 包含,多…...
学习vue3第十四节 Teleport 内置组件介绍
<Teleport></Teleport> 作用目的: 用于将指定的组件或者元素传送到指定的位置; 通常是自定义的全局通用弹窗,绑定到 body 上,而不是在当前元素上面; 使用方法: 接收两个参数 to: 要将目标传…...
mybatis模糊查询查不到数据
排除SQL语句本身存在错误,字段名称不匹配,编码格式问题后,若使用%方式查询,一开始使用单引号查询不到数据,把改成",可以查询到数据 疑问:看别人的代码,使用单引号也可以查询到数据,原因未知...
Python语法总结:not(常出现错误)
0、not是什么 在python中not是逻辑判断词,用于布尔型True和False之前 a not Ture # a False b not False # b True1、not的用法 (1)判断语句 if not a:# 如果a是False,执行的语句(2)判断元素是否在…...
深入理解WebSocket:实时双向通信的利器
一、介绍 1.1 基础概念介绍 单工通信:数据传输只允许在一个方向上传输,只能一方发送数据,另一方接收数据并发送。半双工:数据传输允许两个方向上的传输,但在同一时间内,只可以有一方发送或接收数据。全双…...
Gateway是什么?(SpringCloudAlibaba组件)
1、网关介绍 **网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。**网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可…...
阿里巴巴拍立淘API新功能揭秘:图片秒搜商品,实现智能化个性化购物新体验
在数字化快速发展的今天,智能化和个性化已经成为购物体验中不可或缺的元素。为了满足消费者日益增长的购物需求,阿里巴巴中国站不断推陈出新,其中拍立淘API的新功能——图片秒搜商品,无疑为智能化个性化购物体验开创了新的篇章。 …...
蚓链为移动实体经济加油!
在当今数字化时代,数据已成为企业宝贵的资产之一。如何利用数据资产为可移动实体经济创造更多的增值机会呢?蚓链将为你揭示 11种行之有效的方法! 1. 个性化服务:根据客户数据,提供量身定制的产品和服务,满…...
MySQL 核心模块揭秘 | 12 期 | 创建 savepoint
回滚操作,除了回滚整个事务,还可以部分回滚。部分回滚,需要保存点(savepoint)的协助。本文我们先看看保存点里面都有什么。 作者:操盛春,爱可生技术专家,公众号『一树一溪』作者&…...
SpringMVC --- 老杜
1、什么是SpringMVC? SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的及部分,…...
详细介绍如何利用 A star(A*)算法解决8数码问题
文章目录 1. A star(A*)算法简介2. 利用A*解决8数码问题(含Python代码)2.1 什么是8数码问题2.2 A*算法中的开放列表和关闭列表2.3 A*算法解决8数码问题过程2.3.1 计算节点(棋盘顺序)间距离2.3.2 交换数字生成新的节点2.3.3 A*主求解程序1. A star(A*)算法简介 A ∗ A^*…...
如何锁定鼠标光标在水平、垂直或45度对角线模式下移动 - 鼠标水平垂直移动锁定器简易教程
在我们进行精细工作例如如创建图标和图形设计时,通常需要我们对鼠标移动进行精确控制。一旦向左或向右轻微移动,都可能导致设计出错。若出现不必要的错误,我们极有可能不得不重新开始,这会令人感到非常沮丧。这种情况下࿰…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
