当前位置: 首页 > news >正文

C语言实现RSA算法加解密

使用c语言实现了RSA加解密算法,可以加解密文件和字符串。

rsa算法原理
  • 选择两个大素数p和q;
  • 计算n = p * q;
  • 计算φ(n)=(p-1)(q-1);
  • 选择与φ(n)互素的整数d;
  • 由de=1 mod φ(n)计算得到e;
  • 公钥是(e, n), 私钥是(d, n);
  • 假设明文是M(一个整数),则密文C =  mod n,此为加密过程;
  • 解密过程为M =  mod n;
rsa.h
#pragma once
#include <iostream>
#include <fstream>
#include <tommath.h>
#include <time.h>
#include <Windows.h>
#include <string>#define SUBKEY_LENGTH 78  //  >512 bit#define FILE_NAME_LENGTH 99#define PLAINTEXT_LENGTH 64#define BINARY_LENGTH 512using namespace std;void initial();int Get_char_bit(char c, int pos);void Create_prime_number(mp_int *number);void Generate_key(char *key_name);void Write_key_2_File(char *file_name, mp_int *key, mp_int *n);void ADD_0(char *binary, int mode);void rsa_decrypt(char *src, char *dst, char *key_name, int mode);void rsa_encrypt(char *src, char *dst, char *key_name, int mode);void mp_print(mp_int *number);void Get_key_from_file(mp_int *key, mp_int *n, char *key_name, int mode);void Create_number(mp_int *number, int mode);int Miller_rabin(mp_int *number);void Char_2_binary(char *text, char *binary, int len);void Binary_2_char(char *binary, char *text, int binary_len);void quick_pow(mp_int *a, mp_int *b, mp_int *c, mp_int *d);int Get_file_length(char *filename);
rsa.cpp
#include "rsa.h"mp_int two;
mp_int five;
mp_int zero;
mp_int one;int Get_char_bit(char c, int pos)
{return ((c >> (7 - pos)) & 1);
}// mode 0: number of n digits
// mode 1: 2 <= number <= n - 2  for miller rabin test
void Create_number(mp_int *number, int mode)
{int i;srand((unsigned)time(NULL));char temp_number[SUBKEY_LENGTH + 1];temp_number[0] = rand() % 9 + 1 + 48;if (0 == mode){int temp;for (i = 1; i <= SUBKEY_LENGTH - 2; i++)temp_number[i] = rand() % 10 + 48;temp = rand() % 10;if (0 == temp % 2)temp++;if (5 == temp)temp = 7;temp_number[SUBKEY_LENGTH - 1] = temp + 48;temp_number[SUBKEY_LENGTH] = '\0';}else if (1 == mode){int digit = rand() % (SUBKEY_LENGTH - 2) + 2;for (i = 1; i <= digit - 1; i++)temp_number[i] = rand() % 10 + 48;temp_number[digit] = '\0';}mp_read_radix(number, temp_number, 10);
}int Miller_rabin(mp_int *number)
{int result;mp_int base;mp_init_size(&base, SUBKEY_LENGTH);Create_number(&base, 1);mp_prime_miller_rabin(number, &base, &result);mp_clear(&base);return result;
}void Create_prime_number(mp_int *number)
{mp_int r;mp_init(&r);int time = 100;int result;int i;Create_number(number, 0);while (1){mp_prime_is_divisible(number, &result);if (0 != result){do{mp_add(number, &two, number);mp_mod(number, &five, &r);} while (MP_EQ == mp_cmp_mag(&zero, &r));continue;}for (i = 0; i < time; i++){if (!Miller_rabin(number))break;}if (i == time)return;else{do{mp_add(number, &two, number);mp_mod(number, &five, &r);} while (MP_EQ == mp_cmp_mag(&zero, &r));}}
}void Generate_key(char *key_name)
{mp_int p, q, n, f, e, d;mp_init_size(&p, SUBKEY_LENGTH);mp_init_size(&q, SUBKEY_LENGTH);mp_init_size(&n, SUBKEY_LENGTH * 2);mp_init_size(&f, SUBKEY_LENGTH * 2);mp_init_size(&d, SUBKEY_LENGTH * 2);mp_init_size(&e, SUBKEY_LENGTH * 2);Create_prime_number(&p);Sleep(1000);Create_prime_number(&q);mp_mul(&p, &q, &n);mp_sub(&p, &one, &p);mp_sub(&q, &one, &q);mp_mul(&p, &q, &f);mp_set_int(&d, 127);mp_int gcd;mp_init_size(&gcd, SUBKEY_LENGTH * 2);do{mp_add(&d, &two, &d);mp_gcd(&d, &f, &gcd);} while (MP_EQ != mp_cmp_mag(&gcd, &one));mp_invmod(&d, &f, &e);char PUBLIC_KEY[FILE_NAME_LENGTH] = "d:\\public_key_";char PRIVATE_KEY[FILE_NAME_LENGTH] = "d:\\private_key_";strcat(PUBLIC_KEY, key_name);strcat(PRIVATE_KEY, key_name);Write_key_2_File(PUBLIC_KEY, &d, &n);Write_key_2_File(PRIVATE_KEY, &e, &n);mp_clear_multi(&p, &q, &e, &d, &f, &n, &gcd, NULL);
}void initial()
{mp_init_set_int(&two, 2);mp_init_set_int(&five, 5);mp_init_set_int(&zero, 0);mp_init_set_int(&one, 1);
}void Write_key_2_File(char *file_name, mp_int *key, mp_int *n)
{remove(file_name);FILE *fp = fopen(file_name, "w+");if (NULL == fp){cout << "open file error!" << endl;return;}char key_str[SUBKEY_LENGTH * 2 + 1];char n_str[SUBKEY_LENGTH * 2 + 1];mp_toradix(key, key_str, 10);mp_toradix(n, n_str, 10);fprintf(fp, "%s\n", n_str);fprintf(fp, "%s", key_str);fclose(fp);
}void mp_print(mp_int *number)
{char str[SUBKEY_LENGTH * 2 + 1];mp_toradix(number, str, 10);cout << str << endl;
}// mode 0: get public key
// mode 1: get private keyvoid Get_key_from_file(mp_int *key, mp_int *n, char *key_name, int mode)
{FILE *fp = NULL;char PUBLIC_KEY[FILE_NAME_LENGTH] = "";char PRIVATE_KEY[FILE_NAME_LENGTH] = "";if (0 == mode){strcat(PUBLIC_KEY, key_name);fp = fopen(PUBLIC_KEY, "r+");}else if (1 == mode){strcat(PRIVATE_KEY, key_name);fp = fopen(PRIVATE_KEY, "r+");}if (NULL == fp){cout << "open file error!" << endl;return;}char key_str[SUBKEY_LENGTH * 2 + 1];char n_str[SUBKEY_LENGTH * 2 + 1];fscanf(fp, "%s\n", n_str);fscanf(fp, "%s", key_str);mp_read_radix(n, n_str, 10);mp_read_radix(key, key_str, 10);fclose(fp);
}void Char_2_binary(char *text, char *binary, int len)
{int i;int j;int k = 0;for (i = 0; i <= len - 1; i++){for (j = 0; j <= 7; j++)binary[k++] = Get_char_bit(text[i], j) + '0';}binary[k] = '\0';
}void Binary_2_char(char *binary, char *text, int binary_len)
{int i;int j = 0;int k = 0;int sum = 0;for (i = 0; i <= binary_len - 1; i++){sum = sum + pow(2, 7 - j)*(int)((binary[i]) - '0');j++;if (8 == j){text[k++] = sum;sum = 0;j = 0;}}
}// mode 0: encrypt char*
// mode 1: encrypt file
void rsa_encrypt(char *src, char *dst, char *key_name, int mode)
{mp_int n;mp_int public_key;mp_int plain_number;mp_int cipher_number;mp_init_size(&n, SUBKEY_LENGTH * 2);mp_init_size(&public_key, SUBKEY_LENGTH * 2);mp_init_size(&plain_number, SUBKEY_LENGTH * 2);mp_init_size(&cipher_number, SUBKEY_LENGTH * 2);Get_key_from_file(&public_key, &n, key_name, 0);char plain_text[PLAINTEXT_LENGTH + 1];char cipher_text[PLAINTEXT_LENGTH + 2];char plain_binary[BINARY_LENGTH + 1];char cipher_binary[BINARY_LENGTH + 9];int i;int j;int k;int l;if (0 == mode){int round = ceil(strlen(src) / 64.0);for (i = 0; i < round; i++){for (l = 0; l <= BINARY_LENGTH; l++)plain_binary[l] = '\0';for (l = 0; l <= BINARY_LENGTH + 8; l++)cipher_binary[l] = '\0';for (l = 0; l <= PLAINTEXT_LENGTH; l++)plain_text[l] = '\0';for (l = 0; l <= PLAINTEXT_LENGTH + 1; l++)cipher_text[l] = '\0';for (j = 0; j <= PLAINTEXT_LENGTH - 1; j++){plain_text[j] = src[i * PLAINTEXT_LENGTH + j];if ('\0' == plain_text[j]){for (k = j + 1; k <= PLAINTEXT_LENGTH - 1; k++)plain_text[k] = '\0';break;}}plain_text[PLAINTEXT_LENGTH] = '\0';Char_2_binary(plain_text, plain_binary, PLAINTEXT_LENGTH);mp_zero(&plain_number);mp_read_radix(&plain_number, plain_binary, 2);mp_zero(&cipher_number);// ----------------------------------------------------------------mp_exptmod(&plain_number, &public_key, &n, &cipher_number);//quick_pow(&plain_number, &public_key, &n, &cipher_number);// ----------------------------------------------------------------mp_toradix(&cipher_number, cipher_binary, 2);ADD_0(cipher_binary, 0);Binary_2_char(cipher_binary, cipher_text, BINARY_LENGTH + 8);for (l = 0; l <= PLAINTEXT_LENGTH; l++)dst[i*(PLAINTEXT_LENGTH + 1) + l] = cipher_text[l];}dst[round * (PLAINTEXT_LENGTH + 1)] = '\0';mp_clear_multi(&n, &public_key, &plain_number, &cipher_number, NULL);}else if (1 == mode){ifstream fin;ofstream fout;fin.open(src, ios::binary);fout.open(dst, ios::binary);char ch;int i = 0;int len = Get_file_length(src) % 64;fout << len << endl;while (1){fin.get(ch);plain_text[i++] = ch;if (i == PLAINTEXT_LENGTH || fin.eof()){if (i == PLAINTEXT_LENGTH)plain_text[i] = '\0';else{for (k = i - 1; k <= PLAINTEXT_LENGTH; k++)plain_text[k] = '\0';}for (l = 0; l <= BINARY_LENGTH; l++)plain_binary[l] = '\0';for (l = 0; l <= BINARY_LENGTH + 8; l++)cipher_binary[l] = '\0';for (l = 0; l <= PLAINTEXT_LENGTH + 1; l++)cipher_text[l] = '\0';Char_2_binary(plain_text, plain_binary, PLAINTEXT_LENGTH);mp_zero(&plain_number);mp_read_radix(&plain_number, plain_binary, 2);mp_zero(&cipher_number);// ----------------------------------------------------------------mp_exptmod(&plain_number, &public_key, &n, &cipher_number);//quick_pow(&plain_number, &public_key, &n, &cipher_number);// ----------------------------------------------------------------mp_toradix(&cipher_number, cipher_binary, 2);ADD_0(cipher_binary, 0);Binary_2_char(cipher_binary, cipher_text, BINARY_LENGTH + 8);for (l = 0; l <= PLAINTEXT_LENGTH; l++)fout << cipher_text[l];for (l = 0; l <= PLAINTEXT_LENGTH; l++)plain_text[l] = '\0';i = 0;}if (fin.eof())break;}fin.close();fout.close();mp_clear_multi(&n, &public_key, &plain_number, &cipher_number, NULL);}
}// mode 0: for encrypt
// mode 1: for decrypt
void ADD_0(char *binary, int mode)
{int i;int difference;if (0 == mode)difference = BINARY_LENGTH + 8 - strlen(binary);else if(1 == mode)difference = BINARY_LENGTH - strlen(binary);;for (i = strlen(binary); i >= 0; i--)binary[i + difference] = binary[i];for (i = 0; i < difference; i++)binary[i] = '0';
}// mode 0: decrypt char*
// mode 1: decrypt file
void rsa_decrypt(char *src, char *dst, char *key_name, int mode)
{mp_int n;mp_int private_key;mp_int plain_number;mp_int cipher_number;mp_init_size(&n, SUBKEY_LENGTH * 2);mp_init_size(&private_key, SUBKEY_LENGTH * 2);mp_init_size(&plain_number, SUBKEY_LENGTH * 2);mp_init_size(&cipher_number, SUBKEY_LENGTH * 2);Get_key_from_file(&private_key, &n, key_name, 1);char plain_text[PLAINTEXT_LENGTH + 1];char cipher_text[PLAINTEXT_LENGTH + 2];char plain_binary[BINARY_LENGTH + 1];char cipher_binary[BINARY_LENGTH + 9];int j;int k;int l;if (0 == mode){k = -1;do{k++;for (l = 0; l <= PLAINTEXT_LENGTH; l++)plain_text[l] = '\0';for (l = 0; l <= BINARY_LENGTH; l++)plain_binary[l] = '\0';for (l = 0; l <= BINARY_LENGTH + 8; l++)cipher_binary[l] = '\0';for (j = 0; j <= PLAINTEXT_LENGTH; j++)cipher_text[j] = src[k * (PLAINTEXT_LENGTH + 1) + j];cipher_text[PLAINTEXT_LENGTH + 1] = '\0';Char_2_binary(cipher_text, cipher_binary, PLAINTEXT_LENGTH + 1);mp_zero(&cipher_number);mp_read_radix(&cipher_number, cipher_binary, 2);mp_zero(&plain_number);// ----------------------------------------------------------------mp_exptmod(&cipher_number, &private_key, &n, &plain_number);//quick_pow(&cipher_number, &private_key, &n, &plain_number);// ----------------------------------------------------------------mp_toradix(&plain_number, plain_binary, 2);ADD_0(plain_binary, 1);Binary_2_char(plain_binary, plain_text, BINARY_LENGTH);for (l = 0; l <= PLAINTEXT_LENGTH - 1; l++) dst[k*PLAINTEXT_LENGTH + l] = plain_text[l];} while ('\0' != src[(k + 1)*(PLAINTEXT_LENGTH + 1)]);dst[(k + 1) * PLAINTEXT_LENGTH] = '\0';}else if (1 == mode){ifstream fin;ofstream fout;fin.open(src, ios::binary);fout.open(dst, ios::binary);int i = 0;int limit = PLAINTEXT_LENGTH;char ch;string temp = "";while (1){fin.get(ch);if ('\n' == ch)break;temp += ch;}int len = atoi(temp.c_str());while (1){fin.get(ch);cipher_text[i++] = ch;if (i == PLAINTEXT_LENGTH + 1){if (i == PLAINTEXT_LENGTH + 1) cipher_text[i] = '\0';elsecipher_text[i - 1] = '\0';for (l = 0; l <= BINARY_LENGTH + 8; l++)cipher_binary[l] = '\0';for (l = 0; l <= PLAINTEXT_LENGTH; l++)plain_text[l] = '\0';for (l = 0; l <= BINARY_LENGTH; l++)plain_binary[l] = '\0';Char_2_binary(cipher_text, cipher_binary, PLAINTEXT_LENGTH + 1);mp_zero(&cipher_number);mp_read_radix(&cipher_number, cipher_binary, 2);mp_zero(&plain_number);// ----------------------------------------------------------------mp_exptmod(&cipher_number, &private_key, &n, &plain_number);//quick_pow(&cipher_number, &private_key, &n, &plain_number);// ----------------------------------------------------------------mp_toradix(&plain_number, plain_binary, 2);ADD_0(plain_binary, 1);Binary_2_char(plain_binary, plain_text, BINARY_LENGTH);if (fin.peek() == EOF)limit = len;for (l = 0; l < limit; l++)fout << plain_text[l];for (l = 0; l <= PLAINTEXT_LENGTH + 1; l++)cipher_text[l] = '\0';i = 0;}if (fin.eof())break;}fin.close();fout.close();}mp_clear_multi(&n, &private_key, &plain_number, &cipher_number, NULL);
}// compute d = a ^ b (mod c)
void quick_pow(mp_int *a, mp_int *b, mp_int *c, mp_int *d)
{mp_int temp;mp_int temp_a;mp_int temp_b;mp_init_size(&temp, SUBKEY_LENGTH * 2);mp_init_size(&temp_a, SUBKEY_LENGTH * 2);mp_init_size(&temp_b, SUBKEY_LENGTH * 2);mp_copy(a, &temp_a);mp_copy(b, &temp_b);mp_set_int(d, 1);mp_mod(&temp_a, c, &temp_a);while (MP_GT == mp_cmp(&temp_b, &zero)){mp_mod(&temp_b, &two, &temp);if (MP_EQ == mp_cmp(&one, &temp)){mp_mul(d, &temp_a, d);mp_mod(d, c, d);}mp_div_2(&temp_b, &temp_b);mp_mul(&temp_a, &temp_a, &temp_a);mp_mod(&temp_a, c, &temp_a);}mp_clear_multi(&temp, &temp_a, &temp_b, NULL);
}int Get_file_length(char *filename) 
{FILE *fp = fopen(filename, "rb");if (NULL == fp)return -1;fseek(fp, 0, SEEK_END);int temp = ftell(fp);fclose(fp);return temp;
}
main.h
#pragma once
#include "rsa.h"
 main.cpp
#include "main.h"// example
void main()
{initial();// generate key belong to arg " "Generate_key("hello_world");// ----------------------example: encrypt char* ---------------------------char a[200] = "to_be_or_not_to_be_it_is_a_question";char b[400];char c[200];//rsa_encrypt(a, b, "hello_world", 0);//rsa_decrypt(b, c, "hello_world", 0);cout << "c: " << c << endl;// ------------------------------------------------------------------------// ----------------------example: encrypt file ----------------------------rsa_encrypt("d:\\a.gif", "d:\\m", "d:\\public_key_hello_world", 1);rsa_decrypt("d:\\m", "D:\\b.gif", "d:\\private_key_hello_world", 1);// ------------------------------------------------------------------------}

相关文章:

C语言实现RSA算法加解密

使用c语言实现了RSA加解密算法&#xff0c;可以加解密文件和字符串。 rsa算法原理 选择两个大素数p和q&#xff1b;计算n p * q;计算φ(n)(p-1)(q-1)&#xff1b;选择与φ(n)互素的整数d&#xff1b;由de1 mod φ(n)计算得到e&#xff1b;公钥是(e, n), 私钥是(d, n);假设明…...

如何设计前后端分离的系统架构?

如何将前端页面和后端Java代码进行集成&#xff1f; 将前端页面和后端Java代码进行集成通常需要使用一些特定的工具和技术。以下是一些常见的方法&#xff1a; 使用RESTful API&#xff1a;REST&#xff08;Representational State Transfer&#xff09;是一种基于HTTP协议构…...

【强化学习】SARAS代码实现

前言 SARAS&#xff0c;假设环境状态和动作状态都是离散的。利用动作价值矩阵来进行行为的预测。其主要就是利用时序差分的思想&#xff0c;对动作价值矩阵进行更新。 代码实现 import gymnasium as gym import numpy as npclass sarsa():def __init__(self, states_n, acti…...

P1019 [NOIP2000 提高组] 单词接龙 刷题笔记

P1019 [NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路来自 大佬 Chardo 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 匹配 &#xff1a; 将 第一个字符串末尾 和第二个字符串第一个开始匹配 如果 j<i这段走完了 flag还没…...

如何实现WinApp的UI自动化测试?

WinApp&#xff08;WindowsAPP&#xff09;是运行在Windows操作系统上的应用程序&#xff0c;通常会提供一个可视的界面&#xff0c;用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome&#xff0c;都属于WinApp。常见的WinApp&…...

chrome扩展程序开发之在目标页面运行自己的JS

原文地址&#xff1a;https://qdgithub.com/home/index/article/aid/247.html chrome 插件开发的入门介绍&#xff0c;实现利用 chrome 扩展实现在目标网页运行我们的 js 的功能。关于 chrome 扩展的详细内容&#xff0c;可以通过官网了解。 开发工具很简单&#xff0c;记事本…...

NLP项目之语种识别

目录 1. 代码及解读2. 知识点n-grams仅保留最常见的1000个n-grams。意思是n1000 ? 1. 代码及解读 in_f open(data.csv) lines in_f.readlines() in_f.close() dataset [(line.strip()[:-3], line.strip()[-2:]) for line in lines] print(dataset[:5])[(1 december wereld…...

Linux lpr命令教程:如何使用lpr命令打印文件(附案例详解和注意事项)

Linux lpr命令介绍 lpr命令在Unix-like操作系统中用于提交打印任务。如果在命令行中指定了文件名&#xff0c;那么这些文件将被发送到指定的打印机&#xff08;如果没有指定目的地&#xff0c;则发送到默认目的地&#xff09;。如果命令行中没有列出文件&#xff0c;lpr将从标…...

浅谈C语言inline关键字

对于C开发者来说&#xff0c;inline是个再熟悉不过的关键字&#xff0c;因为默认的成员函数都是inline&#xff0c;也是常规高校教材中宣扬C的“优势”之一。 但是C语言其实也是支持inline关键字的&#xff0c;而且是很早期的gcc就支持了该关键字。在Linux0.12版本内核代码中也…...

Flink1.17实战教程(第六篇:容错机制)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…...

OpenCV实战 -- 维生素药片的检测记数

文章目录 检测记数原图经过操作开始进行消除粘连性--形态学变换总结实现方法1. 读取图片&#xff1a;2. 形态学处理&#xff1a;3. 二值化&#xff1a;4. 提取轮廓&#xff1a;5. 轮廓筛选和计数&#xff1a; 分水岭算法&#xff1a;逐行解释在基于距离变换的分水岭算法中&…...

【AI】注意力机制与深度学习模型

目录 一、注意力机制 二、了解发展历程 2.1 早期萌芽&#xff1a; 2.2 真正意义的注意力机制&#xff1a; 2.3 2015 年及以后&#xff1a; 2.4 自注意力与 Transformer&#xff1a; 2.5 BERT 与预训练模型&#xff1a; 三、基本框架 1. 打分函数&#xff08;Score Fun…...

HTML5和JS实现新年礼花效果

HTML5和JS实现新年礼花效果 2023兔年再见&#xff0c;2024龙年来临了&#xff01; 祝愿读者朋友们在2024年里&#xff0c;身体健康&#xff0c;心灵愉悦&#xff0c;梦想成真。 下面是用HTML5和JS实现新年礼花效果&#xff1a; 源码如下&#xff1a; <!DOCTYPE html>…...

【owt-server】一些构建项目梳理

【owt-server】清理日志&#xff1a;owt、srs、ffmpeg 【owt】p2p client mfc 工程梳理【m98】webrtc vs2017构建带符号的debug库【OWT】梳理构建的webrtc和owt mfc工程 m79的mfc客户端及owt-client...

Linux shell编程学习笔记38:history命令

目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history&#xff1a;显示命令历史列表2.2 history -a&#xff1a;将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c&#xf…...

elasticsearch安装教程(超详细)

1.1 创建网络&#xff08;单点部署&#xff09; 因为我们还需要部署 kibana 容器&#xff0c;因此需要让 es 和 kibana 容器互联&#xff0c;所有先创建一个网络&#xff1a; docker network create es-net 1.2.加载镜像 采用的版本为 7.12.1 的 elasticsearch&#xff1b;…...

arkts中@Watch监听的使用

概述 Watch用于监听状态变量的变化&#xff0c;当状态变量变化时&#xff0c;Watch的回调方法将被调用。Watch在ArkUI框架内部判断数值有无更新使用的是严格相等&#xff08;&#xff09;&#xff0c;遵循严格相等规范。当在严格相等为false的情况下&#xff0c;就会触发Watch的…...

【Jmeter】Jmeter基础9-BeanShell介绍

3、BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。 3.1、Jmeter中使用的BeanShell 在Jmeter中&#xff0c;除了配置元件&#xff0c;其他类型的元件中都有BeanShell。BeanShell 是一种完全符合Java语法规范的脚本语言,并且又拥…...

详解数组的轮转

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…...

html 表格 笔记

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>第二个页面</title><meta name"language" content"cn"> </head> <body><h2 sytle"width:500px;…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...