linux下Openssl RSA加密解密实例
linu中aes对字段加密解密方法

linu中aes对字段加密解密方法
在Linux中,你可以使用OpenSSL库来实现AES加密和解密。
下面是一个简单的示例,演示了如何使用OpenSSL进行AES加密和解密。
首先,确保你已经安装了OpenSSL库。
在大多数Linux发行版中,你可以使用包管理器来安装它。
例如,在Ubuntu上,你可以使用以下命令安装OpenSSL:
```shell
sudo apt-get install openssl
```
接下来,你可以使用以下命令进行AES加密和解密:
加密:
```shell
echo "待加密的文本" openssl enc -aes-256-cbc -salt -in /dev/stdin -out
```
解密:
```shell
openssl enc -d -aes-256-cbc -in -out
```
这些命令使用AES-256-CBC加密算法,你可以根据需要选择其他加密算法。
在加密命令中,`-salt`选项用于添加盐值,以提高安全性。
`-in /dev/stdin`选项指定输入来自标准输入,`-out `选项指定输出到名为``的文件中。
解密命令与加密命令类似,只是不需要`-salt`选项。
`-d`选项表示解密操作。
解密命令会将加密的输出文件(``)解密为明文输出到名为``的文件中。
请注意,这只是一个简单的示例,你可以根据实际需求进行更多的定制和配置。
还可以查看OpenSSL的文档以获取更多关于AES加密和解密的详细信息。
openssl rsa 用法

OpenSSL RSA 用法简介OpenSSL 是一个强大且广泛使用的开源加密工具包,提供了一系列密码学功能,包括对 RSA 加密算法的支持。
RSA 是一种非对称加密算法,可以用于生成和管理公钥和私钥对,以及进行加密和解密操作。
本文将详细介绍 OpenSSL 中 RSA 的用法,包括生成 RSA 密钥对、加密和解密数据、签名和验证等操作。
安装 OpenSSL在开始使用 OpenSSL RSA 命令之前,需先安装 OpenSSL 工具包。
具体安装步骤如下:1.在 Linux 系统上,可以通过包管理器直接安装 OpenSSL。
例如,在 Ubuntu上可以使用以下命令进行安装:sudo apt-get install openssl2.在 Windows 系统上,可以从 OpenSSL 官方网站()下载预编译的二进制文件,并按照提示进行安装。
生成 RSA 密钥对要使用 RSA 加密算法,首先需要生成 RSA 密钥对。
RSA 密钥由一个公钥和一个私钥组成,其中公钥可用于加密数据,私钥可用于解密数据。
以下是使用 OpenSSL 生成 RSA 密钥对的步骤:1.打开终端或命令提示符,并执行以下命令:openssl genrsa -out private.pem 2048上述命令将生成一个 2048 位的 RSA 私钥,并保存到名为private.pem的文件中。
2.接下来,可以通过以下命令从私钥中导出公钥:openssl rsa -in private.pem -pubout -out public.pem上述命令将从private.pem文件中读取私钥,并将对应的公钥导出到名为public.pem的文件中。
现在,你已经成功生成了一个 RSA 密钥对,私钥保存在private.pem文件中,公钥保存在public.pem文件中。
加密和解密数据使用 OpenSSL RSA 加密和解密数据非常简单。
以下是使用 OpenSSL 进行 RSA 加密和解密的步骤:1.首先,创建一个文本文件(例如plaintext.txt),并输入要加密的数据。
在Linux上使用Shell脚本实现文件加密与解密

在Linux上使用Shell脚本实现文件加密与解密在计算机的日常使用中,文件的安全性和隐私保护是非常重要的。
为了保护文件的机密性,我们可以使用加密技术来对文件进行加密和解密。
在Linux操作系统上,我们可以使用Shell脚本来实现文件的加密和解密功能。
本文将介绍在Linux上使用Shell脚本实现文件加密与解密的方法。
一、文件加密在Linux中,我们可以使用openssl命令来进行文件的加密。
openssl 是一个开源的加密工具包,它提供了各种加密算法和加密函数。
下面是一个使用openssl命令进行文件加密的示例Shell脚本:```bash#!/bin/bash# 获取要加密的文件名read -p "请输入要加密的文件名:" filename# 生成随机的加密密码password=$(openssl rand -base64 32)# 加密文件openssl enc -aes-256-cbc -salt -in $filename -out $filename.enc -pass pass:$passwordecho "文件加密成功!加密密码已保存在password.txt文件中。
"# 将加密密码保存到文件中echo $password > password.txt```在以上示例中,首先通过read命令获取用户输入的要加密的文件名,然后使用openssl rand命令生成一个随机的加密密码。
接下来,使用openssl enc命令对文件进行加密,加密算法使用的是aes-256-cbc,加密后的文件保存为原文件名加上.enc后缀。
最后,将生成的加密密码保存在password.txt文件中。
二、文件解密对于加密后的文件,我们可以使用相同的加密密码来进行解密。
下面是一个使用openssl命令进行文件解密的示例Shell脚本:```bash#!/bin/bash# 获取要解密的文件名read -p "请输入要解密的文件名:" filename# 获取加密密码password=$(cat password.txt)# 解密文件openssl enc -d -aes-256-cbc -in $filename -out $filename.dec -pass pass:$passwordecho "文件解密成功!解密后的文件保存为$filename.dec。
openssl 公钥和私钥 用法

openssl 公钥和私钥用法OpenSSL 是一个用于安全通信的开源工具包,它支持多种加密算法,包括公钥和私钥加密。
在本文中,我们将重点讨论OpenSSL 中公钥和私钥的用法。
在使用OpenSSL 进行公钥和私钥加密之前,首先需要生成一对密钥。
生成密钥对的命令如下所示:openssl genpkey -algorithm RSA -out private_key.pemopenssl rsa -in private_key.pem -out public_key.pem -pubout以上命令将生成一个私钥文件private_key.pem 和一个对应的公钥文件public_key.pem。
在生成密钥对之后,可以使用这对密钥进行加密和解密操作。
公钥通常用于加密数据,而私钥则用于解密数据。
接下来,我们将介绍如何使用OpenSSL 进行公钥加密和私钥解密操作。
首先,我们需要准备要加密的数据文件,假设为input.txt,将其加密为output.enc 文件,命令如下所示:openssl rsautl -encrypt -pubin -inkey public_key.pem -in input.txt -outoutput.enc以上命令将使用公钥文件public_key.pem 对input.txt 文件进行加密,并将结果输出到output.enc 文件中。
接下来,我们用私钥解密output.enc 文件,命令如下所示:openssl rsautl -decrypt -inkey private_key.pem -in output.enc -out decrypted_output.txt以上命令将使用私钥文件private_key.pem 对output.enc 文件进行解密,并将结果输出到decrypted_output.txt 文件中。
这样,我们就完成了使用OpenSSL 进行公钥加密和私钥解密的操作。
rsa加密算法详解及例题

RSA加密算法详解及例题
RSA加密算法是一种非对称加密算法,其安全性基于对极大整数做因数分解的困难性。
以下是RSA加密算法的详解及例题:
1. 密钥生成:
* 随机选择两个质数P和Q,越大越安全。
* 计算它们的乘积N=P*Q。
* 计算欧拉函数φ(N)=(P-1)*(Q-1)。
* 随机选择一个整数E,条件是1<E<φ(N),且E与φ(N)互质。
* 计算E对于φ(N)的模反元素D,使得EDmodφ(N)=1,即D=E-1modφ(N)。
* 公钥为(E, N),私钥为(D, N)。
2. 加解密过程:
* 加密:明文M进行加密后得到密文C,计算公式为C=MemodN。
* 解密:将密文C进行解密后得到明文M,计算公式为M=CdmodN。
例题:在RSA加密体制中,已知素数P=7,Q=11,公钥E=13,试计算私钥D并给出对明文M=5的加密,求其密文。
解:首先,根据上述算法进行密钥生成。
根据素数P和Q得到N=77。
计算φ(N)=60。
因为E小于φ(N)且与φ(N)互质,选择E=13作为公钥。
根据公式计算D模反元素得到D=7。
现在有公钥(E, N)=(13, 77)和私钥(D, N)=(7, 77)。
接下来,用公钥加密明文M=5得到密文C=5^13mod77=15。
所以,密文为15。
此例题仅展示了RSA加密算法的基本原理和步骤,实际应用中需要考虑更多安全因素和操作细节。
openssl编程 示例

openssl编程示例以OpenSSL编程示例为标题的文章是关于如何使用OpenSSL库进行编程的。
OpenSSL是一个开源的加密工具包,提供了许多密码学功能,如加密、解密、签名和验证等。
在本文中,我将介绍OpenSSL 库的基本使用方法,并提供一些编程示例来帮助读者更好地理解。
OpenSSL是一个功能强大且广泛使用的加密库,可以用于开发各种应用程序,包括网络安全、数据传输和身份验证等。
它支持许多密码学算法,如对称加密算法(如AES和DES)、非对称加密算法(如RSA和ECC)以及哈希函数(如MD5和SHA-256)等。
在开始使用OpenSSL之前,我们需要安装OpenSSL库并配置开发环境。
安装OpenSSL库的具体方法因操作系统而异,可以在OpenSSL 官方网站上找到相关的安装指南。
配置开发环境主要包括设置编译器参数和链接库文件等。
一旦环境配置完成,我们就可以开始使用OpenSSL库进行编程了。
下面是一些常用的OpenSSL编程示例:1. 生成密钥对使用OpenSSL库生成非对称加密算法所需的密钥对是一个常见的操作。
以下是一个生成RSA密钥对的示例代码:```c#include <openssl/rsa.h>int main() {RSA* rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);if (rsa == NULL) {printf("Failed to generate RSA key pair\n");return -1;}// 打印公钥和私钥printf("Public Key:\n%s\n", BN_bn2hex(rsa->n));printf("Private Key:\n%s\n", BN_bn2hex(rsa->d));RSA_free(rsa);return 0;}```2. 加密和解密数据使用OpenSSL库进行数据加密和解密是保护数据安全的常见操作。
Linux命令行下的文件加密和解密技巧

Linux命令行下的文件加密和解密技巧Linux操作系统提供了强大的命令行工具,使得文件的加密和解密操作变得相对简单和高效。
本文将介绍在Linux命令行下实现文件加密和解密的技巧。
以下是具体内容:一、加密文件1. 使用 OpenSSL 加密文件OpenSSL 是一个强大的开源加密工具包,可以用于加密和解密文件。
要使用 OpenSSL 加密文件,请按照以下步骤操作:(1)打开终端窗口,并导航到要加密的文件所在的目录。
(2)运行以下命令,用于将文件加密,并生成加密后的文件:openssl enc -aes-256-cbc -salt -in 文件名 -out 加密后的文件名其中,-aes-256-cbc 是指使用 AES 256 位加密算法和 CBC 模式进行加密。
您还可以选择其他的加密算法和模式,根据您的具体需求进行调整。
2. 使用 GPG 加密文件GPG(GNU Privacy Guard)是一个开源的加密软件,用于进行文件和文本的加密和解密。
要使用 GPG 加密文件,请按照以下步骤操作:(1)确保您已经安装了 GPG 工具包。
如果没有安装,可以运行以下命令进行安装:sudo apt-get install gnupg(2)打开终端窗口,并导航到要加密的文件所在的目录。
(3)运行以下命令,用于将文件加密,并生成加密后的文件:gpg -c 文件名运行该命令后,系统会提示您输入一个加密密码。
请确保密码的安全性,同时请牢记该密码,因为解密文件时需要使用该密码。
二、解密文件1. 使用 OpenSSL 解密文件要使用 OpenSSL 解密文件,请按照以下步骤操作:(1)打开终端窗口,并导航到要解密的文件所在的目录。
(2)运行以下命令,用于将加密文件解密,并生成解密后的文件: openssl enc -d -aes-256-cbc -in 加密后的文件名 -out 解密后的文件名在运行该命令时,您需要提供正确的加密算法和模式,以确保成功解密文件。
RSA加解密私钥加密公钥解密私加公解C++调用openssl库的代码实例

RSA加解密私钥加密公钥解密私加公解C++调⽤openssl库的代码实例前提:秘钥长度=1024============================================== 对⼀⽚(117字节)明⽂加密私加==============================================// 私钥加密std::string rsa_pri_encrypt(const std::string &clearText, std::string &pubKey){std::string strRet;BIO *keybio = BIO_new_mem_buf((unsigned char *)pubKey.c_str(), -1);// 此处有三种⽅法// 1, 读取内存⾥⽣成的密钥对,再从内存⽣成rsa// 2, 读取磁盘⾥⽣成的密钥对⽂本⽂件,在从内存⽣成rsa// 3,直接从读取⽂件指针⽣成rsa//RSA* pRSAPublicKey = RSA_new();RSA* rsa = RSA_new();rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa, NULL, NULL);if (!rsa){BIO_free_all(keybio);return std::string("");}int len = RSA_size(rsa);//int len = 1028;char *encryptedText = (char *)malloc(len + 1);memset(encryptedText, 0, len + 1);// 加密int ret = RSA_private_encrypt(clearText.length(), (const unsigned char*)clearText.c_str(), (unsigned char*)encryptedText, rsa, RSA_PKCS1_PADDING);if (ret >= 0)strRet = std::string(encryptedText, ret);// 释放内存free(encryptedText);BIO_free_all(keybio);RSA_free(rsa);return strRet;}============================================== 对⼀⽚(128字节)密⽂解密公解==============================================// 公钥解密std::string rsa_pub_decrypt(const std::string &clearText, std::string &pubKey){std::string strRet;BIO *keybio = BIO_new_mem_buf((unsigned char *)pubKey.c_str(), -1);//keybio = BIO_new_mem_buf((unsigned char *)strPublicKey.c_str(), -1);// 此处有三种⽅法// 1, 读取内存⾥⽣成的密钥对,再从内存⽣成rsa// 2, 读取磁盘⾥⽣成的密钥对⽂本⽂件,在从内存⽣成rsa// 3,直接从读取⽂件指针⽣成rsa//RSA* pRSAPublicKey = RSA_new();RSA* rsa = RSA_new();rsa = PEM_read_bio_RSAPublicKey(keybio, &rsa, NULL, NULL);if (!rsa){BIO_free_all(keybio);return std::string("");}int len = RSA_size(rsa);//int len = 1028;char *encryptedText = (char *)malloc(len + 1);memset(encryptedText, 0, len + 1);//解密int ret = RSA_public_decrypt(clearText.length(), (const unsigned char*)clearText.c_str(), (unsigned char*)encryptedText, rsa, RSA_PKCS1_PADDING);if (ret >= 0)strRet = std::string(encryptedText, ret);// 释放内存free(encryptedText);BIO_free_all(keybio);RSA_free(rsa);return strRet;}============================================== 对整体明⽂加密私加==============================================//私钥加密 + 分⽚std::string rsa_pri_split117_encrypt(const std::string &clearText, std::string &pubKey) {std::string result;std::string input;result.clear();for(int i = 0 ; i < clearText.length()/117; i++){input.clear();input.assign(clearText.begin() + i*117, clearText.begin() + i*117 + 117);result = result + rsa_pri_encrypt(input, pubKey);}if( clearText.length()%117 != 0){int tem1 = clearText.length()/117*117;int tem2 = clearText.length() - tem1;input.clear();input.assign(clearText.begin()+ tem1, clearText.end());result = result + rsa_pri_encrypt(input, pubKey);}return result;}============================================== 对整体密⽂解密公解==============================================//公钥解密 + 分⽚std::string rsa_pub_split128_decrypt(const std::string &clearText, std::string &pubKey) {//Base64 *base = new Base64();std::string result;std::string input;result.clear();for(int i = 0 ; i< clearText.length()/128; i++){input.clear();input.assign(clearText.begin() + i*128, clearText.begin() + i*128 + 128);result = result + rsa_pub_decrypt(input, pubKey);}if(clearText.length()%128 != 0){int tem1 = clearText.length()/128 * 128;int tem2 = clearText.length() - tem1;input.clear();input.assign(clearText.begin()+ tem1, clearText.end());result = result + rsa_pri_encrypt(input, pubKey);}return result;}附1:附2:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、生成秘钥文件
openssl genrsa -out secret.key 1024
openssl genrsa是生成密钥的命令,-out是指定所生成的密钥文件,secret.key这个文件里包含了公钥和密钥两部分,就是说这个文件即可用来加密也可以用来解密,如果想分开也可以用下面的命令将公钥导出。
命令中的1024是指生成的密钥的长度。
2、将公钥导出
openssl rsa -in secret.key -pubout -out secret_pub.key
将公钥从secret.key中导出,-in指定输入文件,-out指定提取生成公钥的文件名。
这样我们就有了一个公钥和一个私钥(包含公钥)。
下面我们就可以用公钥来加密文件了。
3.
下面是一个用C实现的OpenSSL RSA加密的程序,程序实现的是公钥加密,私钥解密的过程,当然也可以实现私钥加密,公钥解密,大家可以根据程序后面的函数解释来进行各种更改。
下面将通过第一部分生成的加密文件中的公钥secret_pub.key来实现对字符串的加密,用密钥文件secret.key来实现字符串的解密,程序已经经过编译运行,可以直接实验、运行。
myRSA.h:
1 #ifndef _MY_RSA_H_
2 #define _MY_RSA_H_
3
4 #include <stdio.h>
5 #include <string.h>
6 #include <stdlib.h>
7 #include <openssl/rsa.h>
8 #include <openssl/pem.h>
9 #include <openssl/err.h>
10
11 #define BUFFSIZE 1024
12 #define PUBLICKEY “secret_pub.key”
13 #define OPENSSLKEY “secret.key”
14
15 char* my_EncryptFunc(char *str,char *path_key); //加密函数
16 char* my_DecryptFunc(char *str,char *path_key); //解密函数
17
18
19 #endif
myRSA.c:
1 #include “myRSA.h”
2
3
4 int main(void)
5 {
6 char *p_Src = (char *)”This is my test !”;
7 char *p_EnStr,*p_DeStr;
8
9 printf(“Source is : [%s]\n”,p_Src);
10
11 p_EnStr = my_EncryptFunc(p_Src, PUBLICKEY);
12 printf(“Encryption : [%s]\n”,p_EnStr);
13
14 p_DeStr = my_DecryptFunc(p_EnStr, OPENSSLKEY);
15 printf(“Decryption : [%s]\n”,p_DeStr);
16
17 if(p_EnStr!=NULL)
18 {
19 free(p_EnStr);
20 }
21 if(p_DeStr!=NULL)
22 {
23 free(p_DeStr);
24 }
25
26 return 0;
27 }
28
29
30 char *my_EncryptFunc(char *str,char *path_key)
31 {
32 RSA *p_Rsa;
33 char *p_En;
34 FILE *file;
35 int rsa_len;
36
37 if((file=fop en(path_key,”r”))==NULL)
38 {
39 perror(“open key file error”);
40 return NULL;
41 }
42
43
44 #ifndef RSA_NEW
45
46 if((p_Rsa=PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL))==N ULL)
47 {
48 ERR_print_errors_fp(stdout);
49 return NULL;
50 }
51 else
52 {
53 printf(“PEM read success!\n”);
54 }
55
56 #else
57
58 p_Rsa = RSA_new();
59 if(PEM_read_RSA_PUBKEY(file, &p_Rsa, 0, 0) == NULL)
60 {
61 return NULL;
62 }
63 else
64 {
65 printf(“PEM read new success\n”);
66 }
67
68 #endif
69
70 rsa_len=RSA_size(p_Rsa);
71
72 p_En = (char *)malloc(rsa_len+1);
73 memset(p_En,0,rsa_len+1);
74
75 if(RSA_public_encrypt(rsa_len, (unsigned char *)str, (unsigned char*)p_En, p_Rsa, RSA_NO_PADDING) < 0)
76 {
77 return NULL;
78 }
79
80 RSA_free(p_Rsa);
81 fclose(file);
82
83 return p_En;
84
85 }
86
87 char *my_DecryptFunc(char *str,char *path_key)
88 {
89 RSA *p_Rsa;
90 char *p_De;
91 FILE *file;
92 int rsa_len;
93
94 if((file=fopen(path_key,”r”))==NU LL){
95 perror(“open key file error”);
96 return NULL;
97 }
98
99 if((p_Rsa=PEM_read_RSAPrivateKey(file,NULL,NULL,NULL))==N ULL){
100 ERR_print_errors_fp(stdout);
101 return NULL;
102 }
103
104 rsa_len=RSA_size(p_Rsa);
105 p_De=(char *)malloc(rsa_len+1);
106 memset(p_De,0,rsa_len+1);
107
108 if(RSA_private_decrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_De,p_Rsa,RSA_NO_PADDING)<0){
109 return NULL;
110 }
111
112 RSA_free(p_Rsa);
113 fclose(file);
114
115 return p_De;
116 }
4. linux下编译
gcc myRSA.c -o exe -lssl
1)如果出现如openssl/rsa.h : no such file or direction,则需要安装
openssl-devel
sudo yum install openssl-devel
2) 如果出现:
undefined reference to symbol 'RSA_size@@libcrypto.so.10'
/usr/lib64/libcrypto.so.10: error adding symbols: DSO missing f rom command line
使用新命令:gcc myRSA.c -o exe -lssl -lcrypto
5.运行:./exe
6.结果;。