加密算法(二)
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度对角线模式下移动 - 鼠标水平垂直移动锁定器简易教程
在我们进行精细工作例如如创建图标和图形设计时,通常需要我们对鼠标移动进行精确控制。一旦向左或向右轻微移动,都可能导致设计出错。若出现不必要的错误,我们极有可能不得不重新开始,这会令人感到非常沮丧。这种情况下࿰…...
利用大语言模型实现数据自动标注:Autolabel 实战指南
1. 项目概述:用大模型自动标注数据,告别人工标注的苦差事 如果你做过机器学习项目,尤其是监督学习,那你一定对数据标注这个环节又爱又恨。爱的是,有了高质量标注数据,模型性能才有保障;恨的是&a…...
本地化AI编码助手codex-assistant:部署、实战与安全指南
1. 项目概述:一个本地化的AI编码助手最近在折腾一个挺有意思的开源项目,叫codex-assistant。简单来说,它就是一个能让你用自然语言直接驱动本地代码任务的工具。想象一下,你对着一个命令行窗口说“给我写个Python函数,…...
Linux 基础篇 -- Linux介绍(怎么读、是什么、创始人、吉祥物、发版本、目前存在的操作系统) Linux和Unix的关系 linux和Windows比较
Linux 基础篇 – Linux介绍(怎么读、是什么、创始人、吉祥物、发版本、目前存在的操作系统) & Linux和Unix的关系 & linux和Windows比较 文章目录 1. Linux介绍 1.1 Linux怎么读:1.2 Linux是什么:1.3 Linux创始人:1.4 Linux 的吉祥…...
Cursor-Buddy:基于AI的Web界面语音交互与视觉引导助手
1. 项目概述与核心价值最近在捣鼓一个挺有意思的开源项目,叫cursor-buddy。简单来说,它是一个能“住”在你鼠标光标里的AI助手,专门为Web应用设计。想象一下,你在浏览一个复杂的后台管理系统或者一个数据看板,突然想找…...
逆向实战:从异或表到明文存储,我是如何让Eternium的游戏数据‘裸奔’的
逆向工程实战:解密游戏数据存储的核心逻辑 在数字娱乐时代,游戏安全机制与逆向分析技术之间的博弈从未停止。对于技术爱好者而言,理解游戏如何保护其核心数据不仅是一次智力挑战,更是深入了解计算机系统底层运作的绝佳机会。本文将…...
保姆级教程:彻底解决CondaHTTPError网络连接失败(附.condarc文件完整配置流程)
深度解析CondaHTTPError:从网络诊断到.condarc文件全配置指南 遇到CondaHTTPError: HTTP 000 CONNECTION FAILED错误时,很多开发者会感到束手无策。这个问题通常出现在国内网络环境下,尤其是公司内网、校园网或使用某些代理服务后。本文将带你…...
别再只调pool_size了!MaxPool2D的strides和padding参数实战避坑指南(附TensorFlow/Keras代码)
MaxPool2D参数深度解析:如何用strides和padding精准控制特征图尺寸 在构建卷积神经网络时,池化层的参数设置往往被当作"调参黑箱"一带而过。许多开发者习惯性地只调整pool_size,却对strides和padding参数的微妙影响缺乏足够重视。这…...
BIOS里找不到SSD硬盘?Win10启动失败?可能是ESP引导分区‘隐身’了,手把手教你用PE盘和DiskGenius把它找回来
BIOS里找不到SSD硬盘?Win10启动失败?可能是ESP引导分区‘隐身’了 最近遇到一个奇怪的故障:明明SSD硬盘在PE系统里能正常识别,但BIOS启动项里却死活找不到它。系统反复提示"reboot and select proper boot device"&…...
如何在没有iCloud 备份的情况下从iPhone恢复联系人
不小心删除了 iPhone 上的重要联系人或短信,却发现没有 iCloud 备份可以依靠?别担心;没有 iCloud 备份的数据丢失并不意味着它永远消失了。无论您是误删了短信,还是在iOS更新后丢失了联系人,仍然有办法找回数据。在本指…...
如何3步解决网页数学公式复制到Word的世纪难题?
如何3步解决网页数学公式复制到Word的世纪难题? 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 你是否曾为了将维基百科、学术论文或…...
