mbedtls学习(6)RSA算法

2023-05-16

RSA算法

RSA算法是一种非对称加密算法,特点时加密解密算法不同且加密解密密钥不同,即一般公钥加密,私钥解密。
下面时RSA算法关键参数

  • n 模数,位长度为1024比特或者2048比特
  • e 公开指数,一般为3,7或者65537
  • d 私密指数
  • (n,e)公钥
  • (n,d)私钥
RSA加速技术

RSA私钥操作可以用中国剩余定理(CRT)进行加速执行,再mbedtls配置文件中通过MBEDTLS_RSA_NO_CRT宏打开CRT加速,(默认时打开的)

RSA填充方法

对于RSA加密,给定一个明文,给定一个公钥,就会得到特定密文,这样带来一定安全隐患,所以RSA通常包含填充方案,通过填充动作把随机性注入明文,这样每次加密出来的密文不会相同。RSA有2种填充方案:RSAES-OAEP和RSAES-PKCS1-v1_5.前者目前已经不再推荐使用,后者再实现过程种引入了单项散列函数。

RSA加解密例子

下面例子用伪随机生成器生成rsa密钥对,(当然也可以直接拿外部已经生成的rsa密钥对来加密解密)然后对消息进行加密解密。
需要打开以下宏

#define MBEDTLS_AES_C
#define MBEDTLS_SHA256_C
#define MBEDTLS_ENTROPY_C
#define MBEDTLS_CTR_DRBG_C
#define MBEDTLS_BIGNUM_C
#define MBEDTLS_GENPRIME
#define MBEDTLS_MD_C
#define MBEDTLS_OID_C      开启OID数据结构模块
#define MBEDTLS_RSA_C      开启RSA算法
#define MBEDTLS_PKCS1_V21  开启PKCS#1 v2.1方案
#define MBEDTLS_AES_ROM_TABLES
#include <stdio.h>
#include <string.h>
#include <stdint.h>

#include <stdio.h>
#include <string.h>

#include "mbedtls/rsa.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include "mbedtls/platform.h"

#define assert_exit(cond, ret) \
    do { if (!(cond)) { \
        printf("  !. assert: failed [line: %d, error: -0x%04X]\n", __LINE__, -ret); \
        goto cleanup; \
    } } while (0)

static void dump_buf(char *info, uint8_t *buf, uint32_t len)
{
    mbedtls_printf("%s", info);
    for (int i = 0; i < len; i++) {
        mbedtls_printf("%s%02X%s", i % 16 == 0 ? "\n     ":" ", 
                        buf[i], i == len - 1 ? "\n":"");
    }
}
/*
static int entropy_source(void *data, uint8_t *output, size_t len, size_t *olen)
{
    uint32_t seed;

    seed = sys_rand32_get();
    if (len > sizeof(seed)) {
        len = sizeof(seed);
    }

    memcpy(output, &seed, len);

    *olen = len;
    return 0;
}*/

static void dump_rsa_key(mbedtls_rsa_context *ctx)
{
    size_t olen;
    uint8_t buf[516];
    mbedtls_printf("\n  +++++++++++++++++ rsa keypair +++++++++++++++++\n\n");
    mbedtls_mpi_write_string(&ctx->N , 16, buf, sizeof(buf), &olen);
    mbedtls_printf("N: %s\n", buf); 

    mbedtls_mpi_write_string(&ctx->E , 16, buf, sizeof(buf), &olen);
    mbedtls_printf("E: %s\n", buf);

    mbedtls_mpi_write_string(&ctx->D , 16, buf, sizeof(buf), &olen);
    mbedtls_printf("D: %s\n", buf);

    mbedtls_mpi_write_string(&ctx->P , 16, buf, sizeof(buf), &olen);
    mbedtls_printf("P: %s\n", buf);

    mbedtls_mpi_write_string(&ctx->Q , 16, buf, sizeof(buf), &olen);
    mbedtls_printf("Q: %s\n", buf);

    mbedtls_mpi_write_string(&ctx->DP, 16, buf, sizeof(buf), &olen);
    mbedtls_printf("DP: %s\n", buf);

    mbedtls_mpi_write_string(&ctx->DQ, 16, buf, sizeof(buf), &olen);
    mbedtls_printf("DQ: %s\n", buf);

    mbedtls_mpi_write_string(&ctx->QP, 16, buf, sizeof(buf), &olen);
    mbedtls_printf("QP: %s\n", buf);
    mbedtls_printf("\n  +++++++++++++++++ rsa keypair +++++++++++++++++\n\n");
}

int main(void)
{
    int ret;
    size_t olen = 0;
    uint8_t out[2048/8];

    //mbedtls_platform_set_printf(printf);
    //mbedtls_platform_set_snprintf(snprintf);

    mbedtls_rsa_context ctx;    //RSA密钥结构体
    mbedtls_entropy_context entropy;
    mbedtls_ctr_drbg_context ctr_drbg;
    const char *pers = "simple_rsa";
    const char *msg = "Hello, World!";

    mbedtls_entropy_init(&entropy);//初始化熵结构体
    mbedtls_ctr_drbg_init(&ctr_drbg);//初始化随机数结构体
    //rsa结构体初始化
    mbedtls_rsa_init(&ctx, MBEDTLS_RSA_PKCS_V21, //填充方案OAEP
    						MBEDTLS_MD_SHA256); //SHA256做散列算法
    
   /* mbedtls_entropy_add_source(&entropy, entropy_source, NULL,
                               MBEDTLS_ENTROPY_MAX_GATHER,
                               MBEDTLS_ENTROPY_SOURCE_STRONG);*/
    ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, 
                                    (const uint8_t *) pers, strlen(pers));//根据个性化字符串更新种子
    assert_exit(ret == 0, ret);
    mbedtls_printf("\n  . setup rng ... ok\n");

    mbedtls_printf("\n  ! RSA Generating large primes may take minutes! \n");
	//生成RSA密钥
    ret = mbedtls_rsa_gen_key(&ctx, mbedtls_ctr_drbg_random, //随机数生成接口
                                        &ctr_drbg, //随机数结构体
                                        2048, //模数位长度
                                        65537);//公开指数0x01001
    assert_exit(ret == 0, ret);                                    
    mbedtls_printf("\n  1. RSA generate key ... ok\n");
    dump_rsa_key(&ctx);  
    //RSA加密
    ret = mbedtls_rsa_pkcs1_encrypt(&ctx, mbedtls_ctr_drbg_random, //随机数生成接口
                            &ctr_drbg,          //随机数结构体
                            MBEDTLS_RSA_PUBLIC, //公钥操作
                            strlen(msg),        //消息长度
                            msg,                //输入消息指针
                            out);               //输出密文指针
    assert_exit(ret == 0, ret);                              
    dump_buf("\n  2. RSA encryption ... ok", out, sizeof(out));
	//RSA解密
    ret = mbedtls_rsa_pkcs1_decrypt(&ctx, mbedtls_ctr_drbg_random,//随机数生成接口
    						&ctr_drbg,          //随机数结构体
                            MBEDTLS_RSA_PRIVATE, //私钥操作
                            &olen,           //输出长度
                            out,             //输入密文指针
                            out,             //输出明文指针
                            sizeof(out));    //最大输出明文数组长度
    assert_exit(ret == 0, ret);                              
    
    out[olen] = 0;
    mbedtls_printf("\n  3. RSA decryption ... ok\n     %s\n", out);

    ret = memcmp(out, msg, olen);
    assert_exit(ret == 0, ret);      
    mbedtls_printf("\n  4. RSA Compare results and plaintext ... ok\n");

cleanup:
    mbedtls_ctr_drbg_free(&ctr_drbg);//释放随机数结构体
    mbedtls_entropy_free(&entropy); //释放熵结构体
    mbedtls_rsa_free(&ctx);         //释放rsa结构体

    return ret;
}

log如下


  . setup rng ... ok

  ! RSA Generating large primes may take minutes! 

  1. RSA generate key ... ok

  +++++++++++++++++ rsa keypair +++++++++++++++++

N: BD0A07624B031275BEF49D82B3FF020F69D456B76607956663D303C594AC48C02583DC6D069667BE7DB279A0E4A94A087F4E5A42E3658AED06DF82672CAABABF7C29CDA03A7A74E5FBFBA1F402781FD3EA1EFCE10691DAACD467BC4652E434FDA012BFA62B8F88F530BCCBC648F58B3957B99630244C0EDBF52AFF960239907EB3B2782BB0422302A3FC2CF1BB80C28638E007FF7BC89DC07DAE78044B301B162848C2F0298C8B7DB25A9BB356B481F0F9A5A471B4DF77819D0468EAA83AB37BBB9B16C9A78168D2474A197540B1AFB7D21CDE7A6B3226D271C4D9351B5829B80FBBD73ED7AF26A8FA028871FE22767748E263E1B4D09FCB5F6BD9BDFD605927
E: 010001
D: 6F9F7E60B1FE6C660E8D8E7C612090ECDD06BEF5A84F8E0E599F7E38AAE35849ED5D0149777C54620D02D80303425B2ECD4D4CCAF64F3D4B5CA599F0A65561D433D2D3526B7567956DC75608297519061ED69167A66375865C1DACF4B1798338C7CE8A4FEAA4E4B0334927E23BAE91B9186DC39B45B38B8AA227F3A77644DB6690DAA76F97FF92C0BBD7ACF19FC40F82DA3C2424623BF54E9A6C002A67B31E30B18D14878EB4CF74390A8C9CCE854F2F491DDB628C410C7350BD3235842A8B4C0BF53EDA6E551D1D356859C4C5E3FAEB47EA86E43BC3696B7762F8967387091285F02299FF131793C75C4E344286773531087D741DB31345A881CC31A7722261
P: ED163A4809279C687C89B21089889628F1AB331FE89B0EF7100A9154DC95F9673DA4B716A026FE61D5F91B7EBF94E29C41E396A93FBD566A38CF09B112BEF7A8D3EF74B97DEC02D90D11D162CE4D0B76342A13A0A038A19FB4FBBD669AF410471F3924EC26691D58BBCDEEB85E9344194B5279B55D34F5CCBD06A53CDADA5C89
Q: CC1E93364EF40867F75D40B8EA9794BF8B3EBD2252332F0F2E9E5DE77034C5B1168E0B0D3BE3993F6BEDAB2ED07381B77EF3851B8FCBB715BE333587C9B0ECAAE31C4CCB2EE46033EDAB90D1EC55CA9DEBF88AD95A17D2EC28E753DE676D9BB690D5D59F1D69ED459CD13DBA84A4B628F5DD3119484E37F46BF7CF336EFF7C2F
DP: 88580512523976685C5E6F89B51E5884995E841B3090A38D8FAB1423026C392E9733B79B0A65025BCF4ADFF607451F010F9F4B906FB87A0EC236C6730FBDC4FD514C5F0B21906D9ED7364CFD0E791E434F0277A123230E47A334369AE037C578B14B12A1C00129405358BD9547C6571E58C3C87C756AB484969C50C06B77B249
DQ: BFCB8AEFE0C8148DFC34B77809965CC28E88691732BDBD5E3AA3BC0097C23E6FE38D9C7CD6E5493DFA9FDBD5A530A39653C7662F3BB2635A1ED9E756AC017EA023BE97B9E359DBBB6F7B621C9E410E9DCCF8411F7234289096EEA633B8639988B616F71F07785CE6A82F441D5A3D9A9C6A4968B524E7BA54048F59362EFA0929
QP: 9FE7C2E91937AD577C22FF4E07A6F79EF89850B13E9E010E6FEA0173BB1B117F6E6FD12D886FA68E7911DD8A3225A0C3F0FA80882A9A0AC1CA84AE6C7DD962621FC558CD551BFAB7CE22A5D07DB302DAE2CE143565F413E16A6B0998F62C9DF222C33E3695C29E8ABA12FD147B431FF45DC71AC616221BFB782A44B760331DB8

  +++++++++++++++++ rsa keypair +++++++++++++++++


  2. RSA encryption ... ok
     59 BA E5 46 99 AE DF B1 03 35 DF 90 80 51 BC 8A
     7B EC BE 0E 6E 82 2A 9B 24 4E 26 6A 52 3D 75 5E
     24 AF 2E 5E 76 EC C0 78 95 5F 15 0B B1 53 46 4F
     93 07 29 4F A6 10 2F 41 F0 B3 96 1A 02 5C C4 B4
     71 E3 87 67 68 EB 74 69 A8 85 70 08 62 AA 3B 83
     21 EC 35 1C E1 0E 43 B4 01 9C 00 8E AD 9C 3F 90
     21 23 26 2E EF 73 55 3F 30 7F 3C C3 E1 55 4B 0C
     60 BD 76 6B AD 38 09 26 F2 BD CC 01 65 C1 B0 E7
     BE D3 A6 93 D9 81 11 D4 6C 1F 89 02 92 27 3D A5
     35 9A 9E 88 CA D9 76 D5 0B AE DE E2 D6 F6 FD 6F
     FC 7E B0 90 9C 1C DD E5 49 A4 3C CE E3 BB 66 EB
     B8 16 62 FA 82 45 A7 96 5E 9D E9 77 67 22 37 AB
     62 74 B8 91 E4 6C BA E5 C9 B8 47 12 D8 77 C4 F9
     07 93 0F 5A 4D 57 7B 1A 6A 0D F7 63 84 2F AE CC
     DE 78 4F 5B C2 22 CC EA B5 FC BE 1D 7C F3 2E B4
     6A 4E 1E 77 46 0D 62 63 69 18 A7 27 5C 42 2E BF

  3. RSA decryption ... ok
     Hello, World!

  4. RSA Compare results and plaintext ... ok

上面的rsa keypair中
N和E是公钥
N、E、D、P、Q、DP、DQ、QP属于私钥,其中DP、DQ、QP用于加速解密过程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mbedtls学习(6)RSA算法 的相关文章

  • 从文件加载公钥数据

    在我的应用程序中 我生成一个公钥 私钥对并将它们存储在磁盘上以供以后使用 加载并重新初始化私钥工作正常 但对于私钥 我得到一个未知的 KeySpec 类型 java security spec PKCS8EncodedKeySpec 我不知
  • 从 jquery 安全地调用我的 Web api

    我有一个简单的问题 可能会指出一个复杂的答案 我有一个运行良好的网络 API 但现在我想设置身份验证 授权 我需要它在所有平台上工作 但主要来自 jQuery 当然 我不想像这样以纯文本形式沿着管道发送我的用户名和密码 function G
  • 如何使用 RSAEncryption 创建带有 SHA1 摘要的 PKCS7/CMS?

    我创建了一个pkcs7块 可以自己验证 但是结果和我使用OpenSSL的伙伴不一样 我创建的p7块无法被我的伙伴验证 我们仔细检查代码 只找到c 中找不到对应项的代码 OPENSSL signInfo gt digest enc alg g
  • 如何使用 Go 编程语言从 PEM 文件读取的 RSA 私钥进行加密?

    如何在 go 中执行与以下 C 代码等效的操作 RSA key PEM read RSAPrivateKey f NULL NULL NULL std vector
  • 在 C 语言中用于 RSA 解密的 OpenSSL EVP api 的 EVP_OpenInit() 中出现错误

    我在使用 OpenSSL 库 EVP api 进行 RSA 解密时遇到问题 这是我的密钥生成代码 include
  • RSA 加密 AES 密钥的强度

    我目前正在开发一个在客户端和服务器之间传输数据的系统 并且想知道我计划使用的加密强度是多少 我的想法是拥有一个私钥 公钥 RSA 密钥对 并将公钥分发给每个客户端 将私钥仅保留在服务器上 然后 每个客户端将生成自己的 AES 密钥并使用 R
  • 解码 Base64urlUInt 编码值

    我通常想做的是验证id token从 OpenID Connect 提供商 例如 Google 获得的值 令牌使用 RSA 算法进行签名 公钥从发现 https openid net specs openid connect discove
  • 将 PEM 公钥读取到 iOS 中

    我有一个由 java 使用以下代码生成的 base64 公钥 RSAPublicKeySpec rsaKS new RSAPublicKeySpec modulus pubExponent RSAPublicKey rsaPubKey RS
  • 仅使用 RSA 和 AES 构建 openssl

    我正在一个项目中使用 libcrypto a OpenSSL 默认情况下 所有算法都在 libcrypto a 下可用 对于该项目 我只需要 RSA AES 和 SHA 如何仅使用这些算法构建 libcrypto a 如果您通过运行以下命令
  • 将 RSA PKCS1 私钥字符串转换为 Java PrivateKey 对象

    我有一个存储为字符串的 RSA 私钥 我需要将其转换为 PrivateKey 对象以便与 API 一起使用 我可以找到人们从私钥文件转换为字符串的示例 但不能找到相反的方式 我设法将它转换为 PrivateKey 对象 但它是 PKCS8
  • Android 中使用 Base64 编码的公钥进行 RSA 加密

    如何使用base 64编码的公钥对字节数组进行RSA加密 在阅读了几篇关于如何在 Java 中进行 RSA 加密的文章 谷歌搜索 后 发现了以下片段 public byte rsaEncrypt byte data PublicKey pu
  • 从 X.509 证书中提取 PEM 公钥

    我已经创建了一个包含公钥 DER 文件的证书 但我现在需要 PEM 格式的公钥用于不同的平台 目的是使用相同的公钥 我使用创建它iOS 中的 RSA 加密并使用 PHP 解密 http jslim net blog 2013 01 05 r
  • 通过套接字发送公钥的安全方法

    通过套接字向另一个用户发送 RSA PublicKey 的安全方法是什么 我正在考虑将密钥导出到 ByteQueue 并将字节数组发送给用户 他可以在其中再次构造公钥 或者这是否会泄露可能被滥用的信息 Generate keys AutoS
  • gitosis 要求输入密码

    我已经按照以下说明设置了 gitosis 服务器here http scie nti st 2007 11 14 hosting git repositories the easy and secure way 它对于初始用户来说效果很好
  • 健全性检查 SSH 公钥? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已要求用户提供他们的公共 id rsa pub ssh 密钥 然后将其放入 home theiraccount ssh authorized key
  • PHP服务器端IAB验证openssl_verify总是返回0

    我使用以下函数 服务器端 php 来验证 IAB v3 事务 我从 Android 应用程序传递过来 Override protected void onActivityResult int requestCode int resultCo
  • 我可以在本地使用 RSA 密钥测试身份验证吗?

    有没有办法在本地检查您是否为 RSA 密钥提供了正确的密码 最近 我在将一些提交推送到 github 时遇到了麻烦 因为推送提示输入密码 然后身份验证失败 我验证了 github 具有正确的公钥id rsa文件在我的 ssh目录 并且我验证
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 使用加密 API 导入 DER 编码的公钥

    是否可以使用 MS crypto API 导入 DER 编码的公钥 那么我可以验证签名吗 我需要 MS Crypto API 的一段代码或帮助来导入 DER 编码的公钥 证书 以下三个步骤将允许您导入公钥证书 使用获取证书上下文证书创建证书
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥

随机推荐

  • JIEMI人体美化技术-职业重要

    地址 xff1a https app6ca5octe2206 pc xiaoe tech com detail v 6221b726e4b02b825850f9f6 3 AI技术在快手人像美化中的应用 AI美化难点 xff1a 手淘场景下的
  • 中兴捧月算法挑战赛-RAW夜景图像去噪总结

    最终排名 85 1159 网址 xff1a https zte hina com zte denoise 无缘复赛 xff0c 太菜了 xff0c 不好意思说自己学去噪的了 xff0c 代码会开源 xff0c 但是感觉没什么人看吧 尝试过的
  • 论文笔记:MPRNet: Multi-Stage Progressive Image Restoration

    相关方法 单阶段 多阶段 注意力 方法 将图像分割为不重叠的patches xff1a 四个用于第一阶段 xff0c 两个用于第二阶段 xff0c 原始图像用于最后一阶段 残差学习 xff1a X S 61 I
  • 论文笔记:NAFNet: Simple Baselines for Image Restoration

    向孙老师致敬 xff01 相关工作 图像恢复模型体系结构比较 方法 块内 Intra block 结构比较 xff1a 其中Channel Attention CA xff0c Simplified Channel Attention SC
  • 在Ubuntu 22.04 Jammy Jellyfish Linux上流畅安装VMware tools

    安装 VMware Tools 软件可以更好提升我们的虚拟机使用体验 xff0c 但是在使用VMware自带的linux iso安装VMware Tools后 xff0c 无端会报各种错误 本文将会提供一个使用官方源的途径进行安装的简单指引
  • 研究生投稿被拒经历

    2021 7 25 投稿IEEE JSTARS 2021 7 27 被拒 xff08 查重率不过 xff09 2021 9 7 投稿Remote Sensing赠刊1 2021 9 10 被拒 xff08 创新度不够 xff09 2021
  • 垃圾+虚假会议大全https://waset.org/conferences,千万别投

    这个垃圾网站上面的会议全是假的 xff01 xff01 xff01 千万别投 xff01 xff01 xff01 https waset org conferences 投稿前 我研究领域是 xff1a 不确定性量化和灵敏度分析 学院的毕业
  • CVPR 2022 图像恢复论文

    地址 xff1a https openaccess thecvf com CVPR2022 https openaccess thecvf com CVPR2022 workshops NTIRE Blind2Unblind Self Su
  • 项目代码训练教程

    配置好matconvnet后 xff0c deep model下有三个文件夹 xff0c 分别是我们的方法 xff1a FOC SDeCNN try和SDeCNN方法 xff1a HSI SDeCNN train1 2 3 HSI SDeC
  • 每日一篇论文推荐

    每日一篇论文推荐 7 5 Unsupervised Hyperspectral Denoising Based on Deep Image Prior and Least Favorable Distribution7 6 WINNet W
  • ISP图像信号处理 | GAMES204-计算成像

    图像信号处理 GAMES204 计算成像 Dead Pixel CorrectionBlack Level CompensationAnti aliasingLens Shading CorrectionNoise Reduction3AS
  • np.max()、np.argmax()、np.maximum()、np.min()、np.argmin()、np.minimum()、np.sum()

    numpy专题 最值 求和 最大值np max np argmax np maximum 求和np sum 网上已经有很多对于这几个函数的讲解资料 xff0c 但总感觉讲得有些乱 xff0c 特别是对于高维数组 xff0c 如果指定了某个轴
  • Cortex-M3 (NXP LPC1788)之EEPROM存储器

    EEPROM是一种非易失性存储器 xff0c 主要用于存储相对少量的数据 xff0c 如存储一些系统的配置信息 通过系统的EEPROM控制模块可以轻松的进行EERPOM的存储控制 要正确使用EEPROM需要配置掉电寄存器EEPWRDWN确定
  • sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string

    错误信息 sqlalchemy exc ArgumentError Could not parse rfc1738 URL from string 原 flask sqlacodegen mysql root 64 127 0 0 1 fo
  • 面试题汇总:网络编程

    1 tcp和udp的区别 xff1f xff08 1 xff09 TCP面向连接 xff08 如打电话要先拨号建立连接 xff09 UDP是无连接的 xff0c 即发送数据之前不需要建立连接 xff1b xff08 2 xff09 TCP提
  • CentOS7 安装学之思开源考试系统Mysql版

    环境介绍 序号项目版本1操作系统CentOS Linux release 7 9 2009 Core 2redis7 0 03Mysqlmysql Ver 8 0 29 for Linux on x86 64 MySQL Community
  • Cisco catalyst 交换机升级步骤

    交换机升级步骤 1 准备一个FAT32的U盘 2 到cisco官网上下载交换机镜像 3 将U盘插到交换机上 xff0c 登入交换机concole输入dir usbflash0 xff1a 找到该镜像 xff0c 注意镜像不要放在中文目录下
  • 【性能】【内存】zram解读

    1 背景 nbsp 通过压缩长时间不在前台的进程来节省内存占用 不会像swap一样频繁操作闪存 也可以减少IO操作节省资源 延长闪存寿命 不过内存压缩是一种用时间换空间 的方式 cpu解压缩过程也是需要消耗少量cpu资源 尽管当前andro
  • wifi连接过程抓包

    下面是一次wifi连接过程发送数据的抓包 xff0c 有些包没抓到 xff0c 但还是比较全的 1 4包 xff0c 探测请求 响应过程 STA发出探测请求包Probe ReqAP做出回应 xff0c 发出探测响应包Probe Rsp 5
  • mbedtls学习(6)RSA算法

    RSA算法 RSA算法是一种非对称加密算法 xff0c 特点时加密解密算法不同且加密解密密钥不同 xff0c 即一般公钥加密 xff0c 私钥解密 下面时RSA算法关键参数 n 模数 xff0c 位长度为1024比特或者2048比特e 公开