自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 mpz_export函数详解

mpz_export是 GNU Multiple Precision Arithmetic Library (GMP) 中的一个函数,用于将 GMP 大整数 (mpz_t) 转换为二进制数据(字节数组)。它主要用于将大整数以特定字节序(endianness)和格式导出,便于存储、传输或与其他系统交互。void *data:目标缓冲区指针。int order:控制1-10:指定每个“字”(word)的字节大小(通常选1248size=1size=4int endian:控制01。

2025-06-05 16:26:29 689

原创 mpz_import 函数详解

mpz_import是 GMP 库中用于将二进制数据转换为高精度整数(mpz_t)的重要函数,它允许从特定字节序的二进制数据构造大整数。

2025-06-05 16:25:52 658

原创 gmp将uint*的数据转换成mpz格式

在 GMP (GNU Multiple Precision Arithmetic Library) 中将。任意长度二进制数据(如 uint8_t 数组)32/64 位整数(直接赋值)类型,有几种常见方法。不适用于 >64 位。

2025-06-05 16:25:22 237

原创 SHA-512和SHA-256的ASN.1 OID前缀区别

的 ASN.1 OID(Object Identifier)前缀的详细对比,包括它们的结构差异、DER 编码以及实际应用中的注意事项。如果需要其他哈希算法(如 SHA-384)的 OID,可通过类似方式从 RFC 或 OpenSSL 中获取。

2025-06-05 16:24:50 420

原创 C语言struct和enum结构体小知识

define//当代码中出现PI时,预处理器会直接替换为3.14159。如果加上分号:// 则替换后会变成:* r * r;// 语法错误!#define不加分号,因为它是预处理指令,宏替换会引入额外分号导致错误。typedef必须加分号,因为它是 C 声明语句,所有声明都需要分号结束。特性#define(宏定义)typedef(类型别名)处理阶段预处理阶段(编译前)编译阶段作用文本替换(直接替换代码中的符号)定义类型别名(创建新类型名)是否属于 C 语句❌ 不是 C 语句,是预处理指令。

2025-06-04 18:32:20 732

原创 C语言中枚举类型和typedef使用

enum 枚举名 {标识符1,标识符2,...标识符n。

2025-06-04 18:31:47 157

原创 C语言中memcpy 和strncpy的区别

都是用于数据复制的函数,但它们的设计目的、使用场景和行为方式有显著区别。可防止缓冲区溢出,但可能不终止字符串。较低(但需处理未终止的字符串)防止缓冲区溢出,但需手动检查。复制结构体、数组、二进制数据。复制字符串(安全防止溢出)结构体、数组等二进制数据。现代 C 代码(C11)仅当源字符串长度 <不超过目标缓冲区大小。更安全的替代(可选)

2025-06-03 20:05:10 484

原创 gcc生成静态库并调用

在 Linux 环境下使用 GCC 生成静态库(假设我们要创建一个数学库。编译时添加优化选项(如。,包含加法和减法功能。

2025-05-30 17:03:33 165

原创 静态库和动态库的区别

静态库(Static Library)和动态库(Dynamic Library,也称共享库)是两种不同的代码复用方式,它们在。通过合理选择库类型,可以平衡性能、维护成本和部署复杂度。每个程序独立包含库代码,占用更多内存。多个程序共享同一库,内存占用更少。只需替换库文件,程序无需重新编译。节省资源、支持热更新、便于维护。需确保目标系统存在对应动态库。独立性强、性能好、无依赖问题。启动快(无运行时加载开销)启动稍慢(需加载动态库)直接嵌入到可执行文件中。体积大、更新需重新编译。较小(仅保留库引用)

2025-05-30 17:02:30 309

原创 gcc生成动态库并调用

在 Linux 环境下使用 GCC 生成动态库(较大(库代码嵌入可执行文件)假设我们要创建一个数学库。编译时添加优化选项(如。共享内存(多个程序共用),包含加法和减法功能。每个程序独立占用内存。

2025-05-30 17:01:34 307

原创 GCC编译命令

链接时优化(跨文件优化,需在编译和链接时都启用)强制静态链接(所有库静态编译进可执行文件)推荐优化级别(提高性能,不影响可调试性)生成依赖关系(用于 Makefile,仅编译,不组装和连接,生成汇编代码(生成位置无关代码(编译动态库时必需)将警告视为错误(强制解决所有警告)显示详细的编译过程(调试时有用)禁用栈保护(安全研究时可能用到)优化代码大小(嵌入式系统常用)启用所有警告(推荐始终使用)添加调试信息(用于 GDB)激进优化(可能增加代码体积)生成调试信息(用于 GDB)目标文件(用于分步编译)

2025-05-30 17:00:58 964

原创 centos上,如何编译gmp静态库,并调用

通过这种方式,可以确保程序完全独立运行,无需目标系统安装 GMP 动态库。在 CentOS 上编译 GMP 静态库(确保系统已安装必要的开发工具(从官方下载最新稳定版(如。,说明程序已完全静态链接。或者从 阿里镜像源下载。

2025-05-30 16:58:23 367

原创 fgets和fread的区别

是 C 语言中用于文件读取的两个常用函数,但它们在功能、使用场景和行为上有显著区别。加载到内存,再逐行解析)也是常见优化手段。按块读取二进制或文本数据(无格式处理)严格读取指定字节数或遇到 EOF。根据需求选择,混合使用(如先用。无终止符,原始数据直接写入内存。二进制或文本数据(无格式限制)避免缓冲区溢出(指定最大长度)逐行读取文本文件(按行处理),失败或 EOF 返回。较慢(逐字符检查换行符)需手动确保缓冲区足够大。更快(直接内存拷贝)高(自动截断超长行)需手动检查缓冲区边界。

2025-05-30 16:55:06 712

原创 C语言读取文件内容到Buffer

在C语言中,将文件内容读取到缓冲区(buffer)是一个常见的操作。以下是几种不同的实现方法。

2025-05-30 16:53:08 134

原创 C语言中的malloc函数详解

malloc是C语言标准库中用于动态内存分配的重要函数,它定义在<stdlib.h>头文件中。

2025-05-24 14:10:14 288

原创 C语言 realloc 函数详解

realloc是C标准库中用于动态内存重新分配的函数,定义在<stdlib.h>头文件中。它用于调整之前分配的内存块的大小。

2025-05-24 14:07:40 226

原创 C语言二进制模式和文本模式的区别

打开,两者的主要区别在于数据处理的底层方式,尤其是在不同操作系统上的表现。处理非文本文件(如图片、视频、压缩包)或需要精确控制字节的场景。处理人类可读的文本文件(如配置文件、日志)。)会视为文件结束(即使后面还有数据)。视为字符流(可能受编码影响)则保持原样,不进行任何转换。在C语言中,文件可以用。可能处理EOF字符(如。,仅Windows)

2025-05-24 14:07:08 347

原创 C语言中fgets函数

是一个常用的标准库函数,用于从文件或标准输入(如键盘)中读取一行字符串。,可以防止缓冲区溢出(buffer overflow),相较于。读取的字符串中提取结构化数据(如整数、浮点数、字符串等)用于存储读取数据的字符数组(缓冲区)。安全读取文本行(文件或标准输入)。负责安全地读取一行输入(避免。输入流,可以是文件指针(如。按格式读取(遇空格停止)安全(指定缓冲区大小)直接读导致的溢出)。是更安全的替代方案。

2025-05-24 14:06:25 825

原创 C语言 fseek 函数详解

fseek是C标准库中用于设置文件位置指针的函数,定义在<stdio.h>头文件中。它允许随机访问文件中的任意位置。

2025-05-24 14:05:24 438

原创 C语言fread函数详解

fread是C语言标准库中的一个函数,用于从文件中读取二进制数据。它定义在<stdio.h>头文件中。

2025-05-24 14:04:39 350

原创 C语言fwrite函数使用方法

fwrite是 C 语言标准库中用于二进制数据写入的重要函数,它可以将数据块直接写入文件。

2025-05-24 14:04:01 259

原创 GDB调试常用命令

使用GDB调试的时候,GDB默认只能跟踪一个进程,可以在fork函数调用之前,通过指令设置GDB调试工具跟踪父进程或者是跟踪子进程,默认跟踪父进程。-Wall 的作用: 在不影响程序行为的情况下打开所有warning,发现更多的问题,避免不必要的BUG。-g 的作用:在可执行文件中添加源代码信息,比如可执行文件第几条对应源码第几行。结束当前调用函数并返回指定值,到上一层函数调用处。监视某一个变量或内存地址的值是否发生变化。切换到当前调用线程的指定堆栈。查看当前线程的调用堆栈。运行一个待调试的程序。

2025-05-23 11:40:41 478

原创 cryptography, RSA4K算法用同样的key,去sign同一条消息,产生的signature会不一样么?

(Probabilistic Signature Scheme)是概率性填充方案,会引入随机盐值(salt),因此每次签名结果不同。:PSS 会为每次签名生成不同的随机盐,导致签名结果不同,但所有结果均可通过验证。:PKCS1v15 的签名过程是纯数学计算,无随机性。是确定性填充方案,对同一消息和密钥,生成的签名。,除非需要兼容旧系统。在 RSA 签名中,现代安全应用(推荐)

2025-05-23 11:34:13 260

原创 python进行RSA4K签名时,private_key.sign()参数选择

【代码】python进行RSA4K签名时,private_key.sign()参数选择。

2025-05-23 11:30:08 312

原创 Python加密数据时的非ASCII字符转换处理

所有文本在加密前必须先编码为bytes (加密后的二进制数据可以转换为Base64字符串方便显示/传输PEM格式的密钥已经是ASCII安全格式解密后记得将bytes解码回字符串 (这样处理可以避免"bytes can only contain ASCII literal characters"错误,同时保证中文等非ASCII字符的正确处理。

2025-05-23 11:28:08 172

原创 cryptography可以固定随机数种子么?

在 Python 的库中,来生成可重复的加密密钥(如 RSA 私钥)。这是该库的,目的是强制使用密码学安全的随机源(如操作系统的或 Windows 的),避免开发者因误用伪随机数导致安全漏洞。直接调用系统级的安全随机源,跳过 Python 的random模块固定种子生成的密钥可被攻击者预测,违背密码学基本原则符合 FIPS、NIST 等安全标准对随机性的要求。

2025-05-23 11:27:20 141

原创 RSA-4096 密钥在 cryptography 和 GMP 库之间的转换

在 cryptography (Python) 和 GMP (C语言) 之间转换 RSA-4096 密钥需要注意两者的密钥表示格式差异。

2025-05-23 11:24:16 740

原创 PSS填充方案

相比传统的PKCS#1 v1.5,PSS 通过引入随机盐(Salt)和更复杂的填充结构,显著提升了安全性,能够抵抗选择明文攻击和哈希碰撞攻击。已知存在攻击(如Bleichenbacher)PSS 的填充过程如下(假设使用哈希函数。的一种安全填充方案,定义在。确定性(相同输入输出相同)复杂(含MGF和哈希迭代)每次签名不同(含盐)简单(固定填充模式)

2025-05-23 11:19:09 232

原创 PKCS#1 v1.5 填充方案详解​

PKCS#1 v1.5(Public-Key Cryptography Standards #1, version 1.5)是RSA加密和签名的经典填充方案,由RSA Labs于1993年发布。是更安全的替代方案,但PKCS#1 v1.5仍广泛用于兼容旧系统(如TLS 1.2、SSH、早期PGP等)。(而非具体原因),避免侧信道攻击(如Bleichenbacher攻击)。:对哈希值进行填充,使其长度匹配RSA模数。

2025-05-23 11:18:13 894

原创 rsa4k 需要填充么?填充到多少合适?

是的,RSA在实际应用中必须使用填充方案,直接加密原始数据(无填充)会导致严重的安全问题。

2025-05-23 11:17:08 867

原创 GMP常用函数说明2

其中: GMP选择62作为最大值是因为:使用数字0-9(10个),大写字母A-Z(26个)小写字母a-z(26个),总计:10 + 26 + 26 = 62个唯一字符。是 GMP 库中一个非常有用的函数,用于计算一个大整数在特定进制下的字符串表示所需的字符数(包括可能的符号位)。-1 - 小端序,0 - 本地字节序。使用数字0-9加大小写字母A-Z和a-z。-1 - 小端序,0 - 本地字节序。每个字中不使用的最高位数(通常为0)使用数字0-9加大写字母A-Z。字内字节顺序:1 - 大端序,

2025-05-12 18:25:13 929

原创 GMP常用函数及说明

GMP 是一个用于高精度数学运算的库,支持整数、有理数和浮点数运算。

2025-05-12 18:24:14 166

原创 GMP库生成指定位数的随机素数

生成指定位数的随机素数,可以通过其内置的素数检测函数实现。生成指定位数的随机数(但最高位可能为0,需手动设置)设置特定位为1(确保生成的数满足位数要求且是奇数)表示检测50轮,错误率低于 4−504−50)(GMP 的随机状态是线程安全的),可并行生成。逐步增加候选数(+2 保证跳过偶数)1, 多线程下每个线程独立调用。:确保使用强随机种子(如。保证每次运行结果不同)初始化随机数生成器状态。设置随机种子(这里用。概率性素数检测(参数。

2025-05-12 18:22:21 195

原创 C语言实现RSA算法

这个实现提供了RSA 4K算法的核心功能,可以作为学习RSA原理的基础,或进一步开发更完整加密系统的基础框架。下面是一个完整的RSA 4096位(4K)算法的C语言实现,包含密钥生成、加密和解密功能。

2025-05-07 11:14:38 591

原创 python实现RSA算法

自制实现缺少随机填充(抵抗选择密文攻击),时序攻击防护,密钥安全存储机制等。加密 (1KB数据)

2025-05-07 11:11:56 375

原创 Python3中cryptography与crypto 的区别

是两个不同的密码学库,它们在设计理念、安全性和功能上有显著区别。支持更多实验性算法 (如 Salsa20, NTRU)Python 官方推荐库 (由 PyCA 维护)曾曝出漏洞 (如 CVE-2013-7459)的关键操作通过 C 扩展优化,性能更高。生产环境 (Web/API/DB加密)活跃更新 (2023年仍持续发布)强制使用安全填充 (如 OAEP)默认防护 (如恒定时间算法)实验性支持 (如 NTRU)密钥派生 (PBKDF2)对称加密 (AES等)非对称加密 (RSA)始终避免使用已废弃的。

2025-05-06 15:52:08 913

转载 RSA算法原理(二)

你可能会问,公钥(n,e) 只能加密小于n的整数m,那么如果要加密大于n的整数,该怎么办?其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。而前面已经说过,要知道d就必须分解n,这是极难做到的,所以RSA算法保证了通信安全。在爱丽丝的例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。可是,大整数的因数分解,是一件非常困难的事情。现在,c等于2790,私钥是(3233, 2753),那么,爱丽丝算出。求解,此处省略具体过程。

2025-05-06 14:50:19 39

转载 RSA算法原理(一)

这里就不展开了,只简单说一下思路:如果a与p1互质(a<p1),b与p2互质(b<p2),c与p1p2互质(c<p1p2),则c与数对 (a,b) 是一一对应关系。由于a的值有φ(p1)种可能,b的值有φ(p2)种可能,则数对 (a,b) 有φ(p1)φ(p2)种可能,而c的值有φ(p1p2)种可能,所以φ(p1p2)就等于φ(p1)φ(p2)。,密钥越长,它就越难破解。而包含质数p的数一共有p^(k-1)个,即1×p、2×p、3×p、...、p^(k-1)×p,把它们去除,剩下的就是与n互质的数。

2025-05-06 14:48:32 56

原创 公钥加密算法,是用私钥加密还是公钥加密

理解这一点对设计安全系统至关重要!认证身份和数据完整性。

2025-05-06 10:25:58 215

原创 RSA 4K加解密,用私钥加密还是公钥加密

加密数据用接收方的公钥加密用接收方的私钥解密数字签名用发送的私钥签名用发送方的公钥验证。

2025-04-28 19:57:17 407

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除