算法相关技术栈
文章平均质量分 64
小猿、
整洁的代码简单直接,整洁的代码如同优美的散文,整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java中实现AES算法介绍、应用场景和示例代码
AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据加密和保护敏感信息。AES以其安全性和高效性成为现代加密标准的主流选择。基本原理AES使用对称密钥加密,即加密和解密使用相同的密钥。它处理固定大小的块(128位),并支持多种密钥长度:128位、192位和256位。加密过程包括多个轮次的字节替换、行移位、列混淆和轮密钥加等操作。加密过程将明文分成128位块,并用密钥进行多轮变换,生成密文。解密过程。原创 2025-02-09 10:00:00 · 793 阅读 · 0 评论 -
Java中实现SHA-3算法介绍、应用场景和示例代码
SHA-3(Secure Hash Algorithm 3)是由国家标准与技术研究所(NIST)发布的最新哈希标准。它是基于Keccak算法,提供了可变长度的输出,最常用的输出长度为224位、256位、384位和512位。SHA-3设计的初衷是为了增强安全性,并提供与SHA-2不同的结构。基本原理SHA-3使用一种新的构造方法,称为“吸收-分离”(sponge construction),首先将输入数据“吸收”到状态中,然后生成输出。这种结构提供了灵活性,可以生成不同长度的哈希值。哈希过程。原创 2025-02-08 16:53:09 · 866 阅读 · 0 评论 -
Java中实现ECC算法介绍、应用场景和示例代码
基本原理ECC的安全性基于椭圆曲线离散对数问题。ECC密钥对由私钥(随机数)和公钥(通过私钥和椭圆曲线计算得出)组成。使用椭圆曲线的数学性质,可以实现加密、解密和数字签名。密钥生成随机选择一个私钥。使用椭圆曲线的点乘计算公钥。签名与验证使用私钥对消息的哈希值进行签名。使用公钥验证签名的有效性。ECC是一种高效且安全的密码学算法,适用于多种场景,如数字签名、密钥交换和数据加密。原创 2025-02-07 18:14:06 · 897 阅读 · 0 评论 -
Java中实现RSA算法介绍、应用场景和示例代码
基本原理密钥生成选择两个大素数 ppp 和 qqq。计算 n=p×qn = p \times qn=p×q,nnn 是模数。计算 ϕ(n)=(p−1)(q−1)\phi(n) = (p-1)(q-1)ϕ(n)=(p−1)(q−1)。选择一个小于 ϕ(n)\phi(n)ϕ(n) 的整数 eee(通常选择 65537),使其与 ϕ(n)\phi(n)ϕ(n) 互质。原创 2025-02-05 11:20:09 · 731 阅读 · 0 评论 -
Java 使用雪花算法生成全局 ID 介绍、应用场景和示例代码
雪花算法(Snowflake)是Twitter开发的一种全局唯一ID生成算法。其生成的ID是64位的长整型,具有全局唯一性且趋势递增,常用于全局系统中需要生成唯一标识符的场景。雪花算法具有高效性和多元化特性,适合在各种需要唯一标识的场景中应用。通过优化锁机制和时间管理,可以进一步提升其在大规模环境中的稳定性。原创 2025-02-05 11:19:42 · 867 阅读 · 0 评论 -
Java中实现DES算法介绍、应用场景和示例代码
DES(Data Encryption Standard)是一种对称密钥加密算法,广泛用于加密数据。尽管DES曾是美国政府的标准加密算法,但由于其相对较短的密钥长度(56位),如今已被认为不够安全,通常不再推荐用于新的应用。基本原理DES使用对称密钥加密,意味着加密和解密使用相同的密钥。它将数据分成64位的块,并使用56位的密钥进行加密。DES的加密过程由多个阶段构成,包括初始置换、16轮的替换和置换操作,以及最终的置换。加密过程将明文分成64位块,经过多轮的处理生成密文。解密过程。原创 2025-01-30 09:00:00 · 393 阅读 · 0 评论 -
Java中实现DSA算法介绍、应用场景和示例代码
基本原理密钥生成DSA使用一对密钥,公钥和私钥。私钥用于生成签名,公钥用于验证签名。签名过程对待签名消息生成哈希值。使用私钥对哈希值进行签名。验证过程接收者计算消息的哈希值。使用公钥验证签名的有效性。安全性DSA的安全性基于离散对数问题的困难性。相较于其他算法,DSA需要较长的密钥以确保相同的安全级别。DSA是一种重要的数字签名算法,广泛用于需要身份验证和数据完整性的场景。原创 2025-01-25 10:00:00 · 708 阅读 · 0 评论 -
Java中实现3DES算法介绍、应用场景和示例代码
3DES(Triple Data Encryption Standard)是一种对称加密算法,是对DES算法的增强版本,通过三次应用DES算法来提高安全性。尽管比单一的DES更安全,但随着计算能力的提升,3DES也逐渐被认为不够安全,现在推荐使用AES等更现代的加密算法。基本原理3DES使用三个不同的密钥对数据进行三次加密,密钥长度可为112位或168位(使用三个不同的56位密钥)。加密过程包括三个主要步骤:首先用第一个密钥加密,接着用第二个密钥解密,最后用第三个密钥加密。加密过程。原创 2025-01-24 09:36:04 · 606 阅读 · 0 评论 -
Java中实现SHA-1算法介绍、应用场景和示例代码
SHA-1(Secure Hash Algorithm 1)是一种广泛使用的哈希函数,生成一个160位(20字节)的哈希值。SHA-1被广泛应用于数字签名、数据完整性验证等场景,但由于其安全性不足,现已不推荐用于安全敏感的应用。基本原理SHA-1将任意长度的数据输入转换为固定长度的哈希值(160位)。它使用了一系列复杂的数学运算和位操作,确保输入数据的微小变化会导致输出哈希值的大幅不同。哈希过程输入数据被分块并进行填充,直到长度为512位的倍数。经过多个迭代的处理后,最终生成160位的哈希值。原创 2025-01-23 10:47:36 · 926 阅读 · 0 评论 -
使用Java实现SM2加解密、签名验签功能、应用场景和示例代码
使用Bouncy Castle提供SM2支持,确保在代码中添加相应的安全提供者。下面的代码示例涵盖了SM2的加解密、签名和验签功能。如果使用Maven,可以在。原创 2024-10-23 08:00:00 · 3425 阅读 · 0 评论 -
Java - 回溯算法介绍、应用场景和示例代码
回溯算法是一种试探性搜索算法,用于寻找问题的所有可能解决方案。它通过递归地构建解,并在发现某条路径不可能生成可行解时,撤回到上一步以探索其他可能性。回溯算法特别适用于组合问题、排列问题、子集问题等。回溯算法本质上是一种深度优先搜索(DFS),适用于需要穷举所有可能的解并从中选择符合条件的解的问题。选择:在每一步,选择一个可能的选项。探索:通过递归的方式继续探索该选项所能达到的解。回溯:如果当前选择不可能导致可行解,则返回上一步,尝试其他选择。原创 2024-08-21 20:30:00 · 966 阅读 · 0 评论 -
Java - 剪枝算法介绍、应用场景和示例代码
剪枝算法(Pruning Algorithm)是计算机科学中一种优化算法,主要用于减少搜索空间以提高效率。它通过在某些条件下提前终止无效或不必要的计算来加快问题的求解过程。剪枝算法常用于解决组合优化问题,如博弈树搜索、约束满足问题和路径规划等。剪枝算法通过排除一些不可能产生最优解的分支,来降低计算复杂度。Alpha-Beta剪枝:主要用于博弈树的搜索中,可以减少搜索的节点数量。分支限界法:常用于解决整数规划问题和组合优化问题。迭代加深搜索与深度限制搜索结合的剪枝:用于图搜索和路径规划。原创 2024-08-19 20:00:00 · 1174 阅读 · 0 评论 -
Java - 基数排序算法介绍、应用场景和示例代码
基数排序(Radix Sort)是一种非比较型整数排序算法,适用于整数或固定长度的字符串排序。它的基本思想是将待排序的元素分为多个关键字进行排序,通常从最低位(最低有效位,Least Significant Digit, LSD)到最高位(最高有效位,Most Significant Digit, MSD)逐位进行排序。基数排序可以利用计数排序(Counting Sort)或桶排序作为子程序来实现单个位上的排序。原创 2024-08-22 08:45:00 · 431 阅读 · 0 评论 -
Java - 桶排序算法介绍、应用场景和示例代码
桶排序(Bucket Sort)是一种基于分配的排序算法。它将元素分布到多个桶中,每个桶内使用其他排序算法进行排序,最后将各个桶中的元素合并得到排序后的数组。桶排序的主要思想是通过分布式处理来减少比较次数,从而达到更快的排序效果。桶排序是一种高效的排序算法,特别适合用于数据分布均匀或范围较小的场合。在实现过程中,应根据数据特性合理选择桶的数量和桶内排序算法,以达到最优的排序效果。对于大多数实际应用,考虑到内存使用和数据分布特性,可以与其他排序算法结合使用。原创 2024-08-21 09:30:00 · 536 阅读 · 0 评论 -
Java - 归并排序算法介绍、应用场景和示例代码
归并排序(Merge Sort)是一种基于分治策略的排序算法。其核心思想是将原始数组分成更小的子数组,分别对每个子数组进行排序,然后合并已排序的子数组以得到最终的排序结果。原创 2024-08-20 08:00:00 · 326 阅读 · 0 评论 -
Java-希尔排序算法介绍、应用场景和示例代码
希尔排序(Shell Sort)是插入排序的一种改进版,由 Donald Shell 于 1959 年提出。该算法通过将数据列表分为多个子序列来进行排序,每个子序列的间隔由一个称为增量序列的参数决定。随着算法的进行,增量会逐步缩小,最终减小到 1,此时算法退化为简单插入排序,但由于之前的预排序,整体效率得到了提升。希尔排序的主要优势在于它能更有效地移动元素跨越多个位置,使得数据在整体上更接近于有序状态。这减少了插入排序中逆序元素的数量,从而加快了排序速度。原创 2024-08-19 09:00:00 · 652 阅读 · 0 评论 -
Java - 快速排序算法介绍、应用场景和示例代码
选择基准元素(Pivot):从数组中选择一个元素作为基准元素。常见的选择方法包括选择第一个元素、最后一个元素、随机选择或“三数取中”。分区(Partitioning):将数组分为两部分,使得左边部分的所有元素都小于基准元素,右边部分的所有元素都大于基准元素。递归排序(Recursively Sort):递归地对基准元素左边和右边的子数组进行排序。原创 2024-08-18 14:30:00 · 835 阅读 · 0 评论 -
Java - 插入排序算法介绍、应用场景和示例代码
插入排序(Insertion Sort)是一种简单直观的排序算法,它构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序的工作方式类似于人们理牌的过程,每次将一张牌插入到已经排好序的牌中的适当位置。原创 2024-08-17 10:00:00 · 335 阅读 · 0 评论 -
Java - 二分查找法介绍、应用场景和示例代码
二分查找(Binary Search)是一种在有序数组中查找某个特定元素的高效算法。二分查找的基本思想是通过将搜索范围一分为二来逐步缩小搜索范围,最终定位到目标元素。它利用数组的排序性质,将待查找的元素与中间元素进行比较,以此决定要继续在左半部分还是右半部分继续查找。原创 2024-08-15 14:53:56 · 550 阅读 · 0 评论 -
Java-冒泡排序算法、应用场景和示例代码
冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是通过重复比较相邻元素并交换它们的位置,将较大的元素逐渐“冒泡”到序列的末尾。它是一种稳定的排序算法,最坏和平均情况下的时间复杂度为 O(n2)O(n^2)O(n2),其中 nnn 是序列的长度。尽管冒泡排序的效率较低,但它容易实现,适合教学和学习。原创 2024-08-15 09:00:00 · 789 阅读 · 0 评论
分享