谈谈对《加密算法》的理解

文章目录

  • 一、什么是加密算法?
  • 二、常见的加密算法有哪些?
    • 2.1 对称加密
    • 2.2 非对称加密
    • 2.3 哈希算法
  • 三、加密算法代码展示
    • 3.1 MD5加密
    • 3.2 秘钥加密
    • 3.3 AES加密解密
  • 四、加密算法的使用场景


一、什么是加密算法?

加密算法是一种通过数学方法将明文转换为密文的过程,其目的是防止未经授权的访问。它的核心特征有:机密性、完整性、认证性和不可否认性。


二、常见的加密算法有哪些?

加密算法主要分为以下两类:

2.1 对称加密

对称加密使用相同的密钥进行加密和解密,特点是速度快、适合处理明文数据。常见的对称加密算法包括:

  • DES:早期标准,现因密钥长度短(56位)已不安全。
  • AES:当前主流算法,支持128、192、256位密钥,广泛应用于SSL/TLS、磁盘加密等。

2.2 非对称加密

非对称加密使用一对密钥(公钥和私钥),公钥加密,私钥解密,安全性高但速度较慢。常见算法包括:

  • RSA:基于大整数分解难题,广泛用于数字签名和密钥交换。
  • ECC:基于椭圆曲线数学,密钥长度短但安全性高,适合资源受限环境。

2.3 哈希算法

哈希算法将任意长度的数据映射为固定长度的哈希值,用于数据完整性验证和密码存储。常见算法包括:

  • MD5:128位,已不推荐用于安全场景,因存在碰撞风险。
  • SHA-256:256位,SHA-2家族成员,广泛用于区块链和数字证书。
  • bcrypt:专为密码哈希设计,安全性高。

三、加密算法代码展示

3.1 MD5加密

public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {String content = "a";int hash = content.hashCode();// 根据算法名称获取MD5算法对象MessageDigest messageDigest = MessageDigest.getInstance("MD5");// 获取MD5算法对象byte[] bytes = content.getBytes("UTF-8");// 对字节数组进行摘要messageDigest.update(bytes);// 获取摘要后的结果byte[] resultArray = messageDigest.digest();System.out.println("原文 = " + content);System.out.println("原文字节数组 = " + Arrays.toString(bytes));System.out.println("密文字节数组 = " + Arrays.toString(resultArray));System.out.println("密文 = " + Tools.toHexString(resultArray));}

运行结果如下:

原文 = a
原文字节数组 = [97]
密文字节数组 = [12, -63, 117, -71, -64, -15, -74, -88, 49, -61, -103, -30, 105, 119, 38, 97]
密文 = 0cc175b9c0f1b6a831c399e269772661

3.2 秘钥加密

public static void main(String[] args) {try {Mac mac = Mac.getInstance("HmacMD5");// 初始化,传入密钥KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");// 生成(随机)秘钥SecretKey secretKey = keyGenerator.generateKey();mac.init(secretKey);mac.update("hello".getBytes());byte[] bytes = mac.doFinal();// 将密文转为16进制字符串String result = Tools.toHexString(bytes);System.out.println("密文:" + result);} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);} catch (InvalidKeyException e) {throw new RuntimeException(e);}}

3.3 AES加密解密

public class AESKit {public static void main(String[] args) {// AES加密:128位:16字节String msg = "我本将心向明月奈何明月照沟渠";String encrypt = AESKit.encrypt("1234567890abcdef", msg);System.out.println("原文 = " + msg);System.out.println("密文 = " + encrypt);String decrypt = AESKit.decrypt("1234567890abcdef", encrypt);System.out.println("解密 = " + decrypt);}// 加密public static String encrypt(String key, String content) {try {// 1.创建加密对象Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");SecretKey secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");// 2.初始化加密对象cipher.init(Cipher.ENCRYPT_MODE, secretKey);// 3.加密byte[] bytes= cipher.doFinal(content.getBytes("UTF-8"));// 4.返回密文return Base64.getEncoder().encodeToString(bytes);} catch (Exception e) {throw new RuntimeException(e);}}// 解密public static String decrypt(String key, String encryptMsg) {try {// 1.创建加密对象Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");SecretKey secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");// 2.初始化解密对象cipher.init(Cipher.DECRYPT_MODE, secretKey);// 3.解密byte[] bytes = Base64.getDecoder().decode(encryptMsg);byte[] resultBytes = cipher.doFinal(bytes);return new String(resultBytes);} catch (Exception e) {throw new RuntimeException(e);}}
}

测试结果如下:

原文 = 我本将心向明月奈何明月照沟渠
密文 = C6lGmU3jvX+7At/0IXXXyKCr2WWolqXCPlDLySdXvDga8a4Bf/GTpsb7PANKcNGL
解密 = 我本将心向明月奈何明月照沟渠


四、加密算法的使用场景

加密算法在以下领域发挥重要作用:
网络安全:SSL/TLS协议使用RSA和AES保护HTTPS通信。
数据存储:磁盘加密使用AES保护敏感数据。
区块链:SHA-256用于比特币的挖矿和交易验证。
身份认证:RSA和ECC用于数字签名,确保身份可信。


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

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

相关文章

Fuzz 模糊测试篇JS 算法口令隐藏参数盲 Payload未知文件目录

1 、 Fuzz 是一种基于黑盒的自动化软件模糊测试技术 , 简单的说一种懒惰且暴力的技术融合了常见 的以及精心构建的数据文本进行网站、软件安全性测试。 2 、 Fuzz 的核心思想 : 口令 Fuzz( 弱口令 ) 目录 Fuzz( 漏洞点 ) 参数 Fuzz( 利用参数 ) PayloadFuzz(Bypass)…

哈希表的实现(下)

目录 前言 开散列概念 开散列实现 Insert 优化 Find Erase 前言 上一章节我们用闭散列实现了一下哈希表,但存在一些问题,比如空间浪费比较严重,如果连续一段空间都已经存放值,那么在此位置插入新值的时候就会一直挪动&…

再谈Linux 进程:进程等待、进程替换与环境变量

目录 1.进程等待 为什么需要进程等待? 相关系统调用:wait()和waitpid() wait(): waitpid(): 解析子进程状态(status) 2.进程替换 为什么需要进程替换? 相关系统调用:exec函数家族 3.环境变量 ​…

基于深度学习的无线电调制识别系统

基于深度学习的无线电调制识别系统 本项目实现了一个基于深度学习的无线电调制识别系统,使用LSTM(长短期记忆网络)模型对不同类型的 无线电信号进行自动分类识别。该系统能够在不同信噪比(SNR)条件下,准确识别多种调制类型&#…

Python 爬虫之requests 模块的应用

requests 是用 python 语言编写的一个开源的HTTP库,可以通过 requests 库编写 python 代码发送网络请求,其简单易用,是编写爬虫程序时必知必会的一个模块。 requests 模块的作用 发送网络请求,获取响应数据。 中文文档&#xf…

随机森林(Random Forest)学习

随机森林是一种基于集成学习的机器学习算法,属于Bagging(Bootstrap Aggregating)方法的一种扩展。它通过组合多个决策树来提升模型的泛化能力和鲁棒性,广泛用于分类、回归和特征选择任务。 1.随机森林核心思想 1.1少数服从多数 在…

从 0 到 1!Java 并发编程基础全解析,零基础入门必看!

写在前面 博主在之前写了很多关于并发编程深入理解的系列文章,有博友反馈说对博主的文章表示非常有收获但是对作者文章的某些基础描述有些模糊,所以博主再根据最能接触到的基础,为这类博友进行扫盲!当然,后续仍然会接…

el-input宽度自适应方法总结

使用 style 或 class 直接设置宽度 可以通过内联样式或 CSS 类来直接设置 el-input 的宽度为 100%&#xff0c;使其自适应父容器的宽度 <template><div style"width: 100%;"><el-input style"width: 100%;" v-model"input">…

解决 Supabase “permission denied for table XXX“ 错误

解决 Supabase “permission denied for table” 错误 问题描述 在使用 Supabase 开发应用时&#xff0c;你可能会遇到以下错误&#xff1a; [Nest] ERROR [ExceptionsHandler] Object(4) {code: 42501,details: null,hint: null,message: permission denied for table user…

java每日精进 5.20【MyBatis 联表分页查询】

1. MyBatis XML 实现分页查询 1.1 实现方式 MyBatis XML 是一种传统的 MyBatis 使用方式&#xff0c;通过在 XML 文件中编写 SQL 语句&#xff0c;并结合 Mapper 接口和 Service 层实现分页查询。分页需要手动编写两条 SQL 语句&#xff1a;一条查询分页数据列表&#xff0c;…

linux taskset 查询或设置进程绑定CPU

1、安装 taskset larkubuntu&#xff1a;~$ sudo apt-get install util-linux larkubuntu&#xff1a;~$ taskset --help 用法&#xff1a; taskset [选项] [mask | cpu-list] [pid|cmd [args...]] 显示或更改进程的 CPU 关联性。 选项&#xff1a; -a&#xff0c; --all-tasks…

Python应用字符串格式化初解

大家好!在 Python 编程中&#xff0c;字符串格式化是一项基础且实用的技能。它能让你更灵活地拼接字符串与变量&#xff0c;使输出信息更符合需求。本文将为和我一样的初学者详细介绍 Python 字符串格式化的常用方法。 定义: 字符串格式化就是将变量或数据插入到字符串中的特定…

EasyRTC嵌入式音视频通信SDK一对一音视频通信,打造远程办公/医疗/教育等场景解决方案

一、方案概述​ 数字技术发展促使在线教育、远程医疗等行业对一对一实时音视频通信需求激增。传统方式存在低延迟、高画质及多场景适配不足等问题&#xff0c;而EasyRTC凭借音视频处理、高效信令交互与智能网络适配技术&#xff0c;打造稳定低延迟通信&#xff0c;满足基础通信…

SEO长尾词优化精准布局

内容概要 长尾关键词作为SEO策略的核心要素&#xff0c;其价值在于精准捕捉细分需求与低竞争流量入口。相较于短尾词的高泛化性&#xff0c;长尾词通过语义扩展与场景化组合&#xff0c;能够更高效地匹配用户搜索意图&#xff0c;降低优化成本的同时提升转化潜力。本文将从词库…

【MySQL】第7节|Mysql锁机制与优化实践以及MVCC底层原理剖析

锁等待分析 我们通过检查InnoDB_row_lock相关的状态变量来分析系统上的行锁的争夺情况 示例场景 假设有两个用户同时操作账户表 accounts&#xff08;主键为 id&#xff09;&#xff1a; 1. 用户A&#xff1a;执行转账&#xff0c;锁定账户 id1 并等待3秒&#xff1a; BEG…

基于规则引擎与机器学习的智能Web应用防火墙设计与实现

基于规则引擎与机器学习的智能Web应用防火墙设计与实现 引言&#xff1a;智能防御的必然选择 在2023年OWASP最新报告中&#xff0c;传统Web应用防火墙&#xff08;WAF&#xff09;对新型API攻击的漏报率高达67%&#xff0c;而误报导致的正常业务拦截损失每年超过2.3亿美元。面…

GIM发布新版本了 (附rust CLI制作brew bottle流程)

GIM 发布新版本了&#xff01;现在1.3.0版本可用了 可以通过brew upgrade git-intelligence-message升级。 初次安装需要先执行 brew tap davelet/gim GIM 是一个根据git仓库内文件变更自动生成git提交消息的命令行工具&#xff0c;参考前文《GIM: 根据代码变更自动生成git提交…

PyQt5高效布局指南:QTabWidget与QStackedWidget实战解析

&#x1f50d; 问题背景 当界面控件过多时&#xff0c;直接平铺会导致窗口拥挤、用户体验下降。PyQt5提供了两种高效容器控件&#xff1a; QTabWidget&#xff1a;选项卡式布局&#xff0c;支持直接切换不同功能模块QStackedWidget&#xff1a;堆栈式布局&#xff0c;需配合导…

《2.2.1顺序表的定义|精讲篇》

上一节学习了线性表的逻辑结构&#xff0c;线性表需要实现哪些基本运算/操作&#xff1f;在本节中&#xff0c;我们将学习顺序表的定义、顺序表的特性&#xff0c;以及如何用代码来实现顺序表。下个小节我们会介绍基于顺序存储&#xff08;这种存储结构&#xff09;如何用代码具…

【 大模型技术驱动智能网联汽车革命:关键技术解析与未来趋势】

大模型技术驱动智能网联汽车革命&#xff1a;关键技术解析与未来趋势 关键词总结&#xff1a; 大模型技术&#xff1a;LLM、VLM、MLLM、Transformer架构核心场景&#xff1a;智能驾驶、智能座舱、智能网联关键技术&#xff1a;端到端系统、BEVOCC网络、多模态融合、强化学习挑…