- 博客(33)
- 资源 (12)
- 收藏
- 关注
原创 RSA算法详解
RSA 算法是一种非对称加密算法,由 Ron Rivest、Adi Shamir 和 Leonard Adleman 于 1977 年提出,其名称取自三位发明者的姓氏首字母。作为非对称加密的经典代表,RSA 基于 “大数分解问题” 的数学困难性,广泛应用于数字签名、密钥交换、数据加密等领域。以下从核心原理、工作流程、安全性及应用等方面进行详细解析。RSA 属于其安全性依赖于:对于两个大质数(如 1024 位或 2048 位)的乘积(即 “模数 n”),在现有计算能力下,很难将其分解为原来的两个质数。。
2025-08-02 06:47:35
1920
原创 RC4算法详解
PRGA 以 KSA 输出的状态向量 S 为起点,通过不断迭代生成伪随机的密钥流字节,每生成一个字节,S 的状态会发生微小变化。生成的密钥流并非完全随机,部分字节(如 0 字节)出现的概率高于理论值,可能被攻击者利用进行统计分析。KSA 的作用是将用户提供的密钥(长度可变,通常 1-256 字节)转换为一个 256 字节的。最终得到的 S 是一个由密钥控制的、打乱后的 256 字节数组,作为 PRGA 的初始状态。若密钥存在缺陷(如太短、重复模式),KSA 生成的 S 可能不够随机,导致密钥流可预测。
2025-08-02 06:00:06
768
原创 Serpent 算法详解
摘要: Serpent是一种高安全性的对称密钥分组密码算法,采用128位分组和128/192/256位密钥,通过32轮SPN结构(S盒、线性变换、子密钥异或)实现加密。其设计强调理论安全冗余,使用8个4×4 S盒和复杂比特置换(P层)确保抗差分/线性攻击。密钥扩展生成33个子密钥,解密流程与加密对称。虽然硬件实现高效,但32轮设计导致软件性能低于AES。优点包括极致安全性、算法透明性,缺点是速度慢、硬件依赖性强,实际应用较少。
2025-07-29 06:34:19
1294
原创 Blowfish算法详解
用当前的 P 数组和 S 盒加密一个 64 位的 “全零块”(0x0000000000000000),得到的密文作为新的 P [0] 和 P [1];再用更新后的 P 数组和 S 盒加密该密文,结果作为 P [2] 和 P [3];例如,若密钥长度为 64 位(2 个 32 位块 K0、K1),则 P [0] ^= K0,P [1] ^= K1,P [2] ^= K0,P [3] ^= K1……加密时使用子密钥顺序为 P [0] 至 P [17],解密时使用顺序为 P [17] 至 P [0]
2025-07-29 06:19:01
701
原创 ChaCha20 算法详解
的流密码,其核心是通过迭代操作生成伪随机密钥流,再与明文进行异或加密。与 AES 的 SP 网络(替代 - 置换)不同,ChaCha20 使用简单的算术和位运算,在软件实现上更高效。:256 位密钥被拆分为 8 个 32 位字,填充到矩阵的第 4-11 位置。:64 位计数器,初始值通常为 0,以小端序存储在矩阵的第 12-13 位置。k0, k1, k2, k3, // 密钥(前半部分)k4, k5, k6, k7, // 密钥(后半部分)c0, c1, c2, c3, // 常数。
2025-07-26 06:15:53
1811
原创 DES算法详解
将 56 位密钥分为左右两半(C₀、D₀,各 28 位),每轮分别循环左移 1 位或 2 位(第 1、2、9、16 轮左移 1 位,其余轮次左移 2 位)。16 轮迭代后,将左半部分(L₁₆)和右半部分(R₁₆)拼接为 64 位(R₁₆L₁₆),再通过初始置换的逆置换(IP⁻¹)得到 64 位密文。:通过三次 DES 加密(加密 - 解密 - 加密),密钥长度扩展为 112 位或 168 位,增强安全性,但效率较低。64 位明文按固定置换表重排(如第 58 位→第 1 位,第 50 位→第 2 位……
2025-07-26 04:28:57
1233
原创 Keccak 算法详解
Keccak 是一种基于海绵结构(Sponge Construction)的密码哈希算法,由比利时密码学家团队设计,2012 年被美国 NIST 选为 SHA-3 标准的核心算法。对每行元素执行:s[x][y] = s[x][y] ^ ((~s[x+1][y]) & s[x+2][y])。与轮常数(RC [r])异或,RC [r] 由 LFSR 生成,每轮不同34。与轮常数(RC [r])异或,RC [r] 由 LFSR 生成,每轮不同。第 x 行的元素 y 移动到位置 (2x+3y) mod 5。
2025-07-26 04:24:54
1299
原创 SHA-3算法详解
SHA-3是美国NIST在2015年发布的下一代密码哈希标准,基于Keccak算法设计,采用创新的海绵结构替代传统哈希框架。其核心特性包括:支持224-512位可变输出、1600位固定状态矩阵、24轮置换运算,具有抗量子攻击、长度扩展免疫等安全优势。算法通过"吸收-置换-挤压"流程处理数据,每轮包含5个复杂变换步骤(θ/ρ/π/χ/ι)。相较于SHA-2系列,SHA-3在硬件效率、灵活性方面表现突出,已应用于区块链、TLS协议等领域,但未来仍需应对量子计算等潜在威胁。
2025-07-24 06:42:48
1256
原创 SHA512算法详解
SHA-512是NIST标准化的安全哈希算法,采用512位输出和80轮加密运算,通过预处理、消息扩展和迭代压缩等步骤生成不可逆的哈希值。其核心特性包括高安全性(256位抗碰撞)、雪崩效应和高效计算,适用于数字签名、区块链、数据校验和密码存储等场景。算法基于Merkle-Damgård结构,使用64位字长进行80轮复杂运算,确保输入微小变化会导致输出完全不同。作为SHA-2家族重要成员,SHA-512在安全性和性能间取得平衡,被广泛应用于现代密码学领域。
2025-07-24 06:37:11
1138
原创 SHA256算法详解
SHA-256(Secure Hash Algorithm 256-bit)是 SHA-2 哈希函数家族的核心成员,由美国国家标准与技术研究院(NIST)于 2001 年发布,旨在替代已被破解的 SHA-1。
2025-07-22 07:18:31
4319
原创 SHA1算法详解
SHA-1是一种160位的加密哈希算法,曾广泛应用于数据安全领域。该算法将任意长度输入转换为固定长度的哈希值,具有单向性和雪崩效应等特性。其处理流程包括数据填充、分块和80轮迭代运算。然而,随着计算技术的发展,SHA-1的安全性已被证实存在严重缺陷。2005年首次发现理论碰撞攻击,2017年实现实际碰撞案例。目前NIST等机构已建议淘汰SHA-1,推荐采用更安全的SHA-256、SHA-3等替代算法。尽管在部分遗留系统中仍有使用,但关键系统应立即迁移至更安全的哈希方案。
2025-07-21 05:25:44
1124
原创 MD5算法详解
MD5是一种128位哈希算法,由Ron Rivest于1991年设计,用于数据完整性校验和密码存储。其核心流程包括数据填充、初始化哈希值、分组处理(4轮非线性运算)和结果合并。虽然MD5计算速度快、实现简单,但存在严重安全漏洞:2004年被证实可碰撞攻击,彩虹表攻击威胁大。目前仅适用于非敏感场景(如文件校验),密码存储等关键应用应改用SHA-256等更安全的算法。MD5的兴衰反映了密码学技术的演进,现已成为哈希算法安全性研究的典型案例。
2025-07-20 05:50:51
2084
原创 BASE64算法详解
摘要:BASE64是一种将二进制数据编码为可打印字符的算法,使用64个字符(A-Z,a-z,0-9,+,/,=)表示数据。编码过程包括:将二进制数据按3字节分组,分割为4个6位小块并映射为BASE64字符,不足位用"="填充。解码则是逆过程。其优点是简单通用,适合在文本协议中传输二进制数据(如邮件附件、URL参数),但会使数据量增加33%且不具备加密功能。使用时需注意填充处理、字符集变种等问题,不能将其误用作加密手段。
2025-07-20 05:41:53
923
原创 常见的预处理指令说明
常见的预处理指令如下:预定义指令名称含义#define宏定义#undef撤销已经定义过的宏名#include使编译程序将另一源文件嵌入到另一源文件中#if条件预编译#else条件预编译的else分支#elif条件预编译的else if分支#endif结束条件预编译执行#ifdef如果有定义XXX宏#ifndef如果没有定义XX宏#line改变当前行数和文件名称#error编译错误#pragma可以
2020-09-24 00:36:46
528
1
原创 #define宏与枚举以及typedef关键字的区别
#define宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值。一般在调试器里面,可以调试枚举常量,但是不能调试宏常量枚举可以一次定义大量相关的常量,但是#define宏一次只能定义一个...
2020-09-23 23:59:24
788
原创 大端小端模式介绍
大端小端基本概念计算机存储以字节为单位,除开少数可以支持位寻址的单片机(8051,8052等)以外,CPU最小的访存单元为8个比特位即一个字节,那么对于超过一个字节的数据类型在内存中的存储有以下两种模式。大端模式(Big_endian): 字节数据的高字节存储在低地址中,而字节数据的低字节存储在高地址中。小端模式(little_endian):字节数据的高字节存储在高地址中,而字节数据的低地址存储在低地址中。以int数据类型举例。假设int在内存中的大小为两个字节,即占16位,有如下代码:in
2020-09-21 01:40:28
2108
原创 最基本的关键字-sizeof
首先sizeof是一个关键字,不是函数,表示计算变量所占内存空间大小。sizeof的计算可以不带括号,但不带括号情况下不能计算数据类型, 比如声明变量int i; 那么sizeof i 是正确的写法,但是sizeof int是错误的写法。可以加括号将其改写成sizeof(int)进行计算。sizeof的返回值为无符号的整型,即unsigned int,有可能在不同系统平台下运行的代码,需要考虑符号位以及位宽的因素,避免造成数据异常。...
2020-09-21 00:42:27
541
原创 winform sqlite基本操作
引用sqlite数据库winform要使用sqlite数据库,必须引用System.Data.SQLite.dll文件,添加方法:右键工程,添加,引用,浏览,选择System.Data.SQLite.dll文件,然后在代码里面便可以使用以下命名空间:using System.Data.SQLite;using System.Data.Sql;using System.Data.SqlCli...
2019-06-22 18:10:25
3517
原创 系统时间与格林威治时间
/*计算当前时间到格林威治时间总共过了多少秒,以当前北京地区东八区时间为准*/unsigned long mktime_second(const unsigned int year0, const unsigned int mon0, const unsigned int day, const unsigned int hour, const unsigned int...
2019-01-14 10:14:13
1883
原创 Makefile 简单编译规则
makefile的规则target ... : prerequisites ... command ... ...target被称为目标文件,prerequisites 表示需要生成target的文件列表。command也就是make要执行的命令。即,target中包含的一个或多个目标文件依赖于prerequisites中的文件,其规则定义在comman中。在默认的情况下,输入mak...
2018-12-15 17:14:14
2124
1
原创 Linux多进程 --无名管道
无名管道的创建函数pipe函数原型:int pipe(int pipefd[2]);头文件:#include <fcntl.h> #include <unistd.h>输入参数: pipefd: int型数组,长度为2,用于创建无名管道后存放对无名管道进行读写的文件描述符。返回值:创建无名管道的结果,0表示成功,-1失败函数说明调用pipe函数创建一个无名管...
2018-11-29 00:40:21
361
原创 Linux多进程--wait/waitpid
等待子进程状态改变函数wait函数原型:pid_t wait(int *status);头文件:#include &amp;amp;lt;sys/types.h&amp;amp;gt; #include &amp;amp;lt;sys/wait.h&amp;amp;gt;输入参数: status: int型指针,用于获取子进程状态发生改变时,返回的状态值。返回值:pid_t是一个宏定义,其实质是int被定义在#include
2018-11-28 00:24:12
966
原创 Linux多进程--创建进程(fork/exit)
创建进程fork()函数原型:Pid_t fork(void);头文件:#include &amp;amp;amp;amp;amp;amp;lt;unistd.h&amp;amp;amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;amp;amp;lt;sys/types.h&amp;amp;amp;amp;amp;amp;gt;参数:无参数返回值:pid_t pid_t是一个宏定义,其
2018-11-26 15:18:28
1056
原创 STM8 如何自制BootLoader并实现在线升级
STM8自制Bootloader程序,可实现串口进行软件升级,利用该部分原理,可远程进行代码的修改和功能的更新
2017-09-30 14:49:24
11548
9
原创 STM8 时钟源切换
STM8时钟源:1、1~24MHz的高速外部晶体振荡器(HSE),即外部晶振 2、1~24MHz的高速外部时钟信号(HSE), 3、16MHz的高速内部RC振荡器(HSI) 4、128KHz的低速内部RC振荡器(LSI) 默认时钟源:由上述时钟框图,可以分析得知,16MHz HSI RC振荡器经过一个分频器,将时钟信号输出到主时钟选择器。单片机上电后默认该分频器的值为8分频,即单片机上电主时
2017-02-17 16:36:33
5034
原创 STM8 UART中断发,中断收
STM8 UART 初始化配置STM8 UART的几个常用寄存器分别为: UART1_CR1:控制寄存器1 UART1_CR3:控制寄存器3 UART1_BRR2:波特率寄存器2 UART1_BRR1:波特率寄存器1利用控制寄存器1,2,3可以配置UART数据传输的具体帧格式,这里将UART配置为1个起始位,8个数据位,1个停止位,无校验位。具体操作代码如下: UART1_CR1=
2017-01-23 16:46:31
7969
原创 MP4文件数据格式
MP4文件结构MP4文件中所有数据都封装在Box中 (QuickTime中为atom),即MP4是由若干个Box组成的,每个Box还可以包含其他的Box这样的Box称为container box.一个MP4文件首先会有且只有一个ftyp类型的box,作为MP4格式的的标志并包含关于文件的一些信息;之后会有且只有一个MOOV类型的Box它是一种container box,子box包含了媒体的metad
2016-12-17 10:55:01
1739
原创 火星坐标与地球坐标的转换,以及地球上两点之间的距离计算
火星坐标与地球坐标的转换,以及地球上两点之间的距离计算地球坐标就是我们通过GPS获得的GPS坐标,而我们所谓的火星坐标,就是经过国家测绘局进行加密后的坐标(WGS-84 ),而这个火星坐标只在国内有效。下面这个函数用来判断坐标是否属于中国境内,但是这个坐标判断不是太准确,只是大概判断。 bool outOfChina(double lat, double lon){
2016-11-03 20:59:14
5270
原创 GMap 鼠标拖拽与单击冲突问题以及按下鼠标移动Marker
GMap 鼠标拖拽与单击冲突问题以及按下鼠标移动Marker好久没有写博客啦,之前写了三篇关于GMap的,还是想继续写下去,在之前的基础之上本篇博客就解决两个问题吧:我们在使用鼠标拖拽地图时,拖拽完成后,抬起鼠标GMap控件会触发鼠标点击事件, 原本博主以为GMap会提供相应的接口去让我们禁止触发鼠标单击事件,但是博主貌似没有找到GMap有提供这个接口,所以这个只能是我们手动来完成了。首先利用G
2016-11-01 23:12:11
4609
原创 STM32环境搭建,建立工程及程序烧录
开发环境的搭建:STM32开发环境使用Keil MDK进行,今天香农就说说怎么使用MDK建立一个工程首先应该下载到MDK官网:http://www.keil.com/arm/mdk.asp 下载最新版的MDK安装包,进入MDK官网,点击download按钮 跳转到下载界面,填入必要的信息: 然后在页面下方点击提交按钮: 如果填写的信息,符合要求,在本页面将会显示下载连接:
2016-08-01 20:26:40
24127
1
原创 GMap 初步使用
香农上次写了有关GMap开源项目源码的编译方法,这次就讲讲怎么使用GMap进行简单操作吧。首先香农建立了一个winform工程,命名为GMapTest1并在工程中添加了对GMap的引用(GMap.NET.Core.dll和GMap.NET.WindowsForms.dll) 添加完成之后将GMapControl控件拖拽到Form面板上,默认GMapControl名称为gMapControl1(
2016-08-01 15:49:25
16619
5
原创 GMAP 开源代码如何编译
GMAP 开源代码如何编译在公司研究了好久的GMAP,一直想分享一下心得,筹划了好久,今天终于开始写了。有不对的地方还请海涵。由于小编是使用winform进行GMAP开发的,所以这里只赘述winform如何进行GMAP开源代码的编译。首先需要下载GMAP的官方源码,下载地址可以从GMap官网下载,也可以去网上找,小编这里提供一个链接: http://download.youkuaiyun.com/downlo
2016-07-30 17:27:33
4257
Bootloader_App_DownloadTools
2017-09-30
Gmap鼠标拖拽Marker
2016-11-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅