OpenSSL进行aes加密解密-对称加密(symmetry)

  • 建立文件test.txt, 特意写入中英文
# cd /tmp
# echo "test测试" > test.txt
  • 开始加密, 使用aes-128-cbc算法, 也可以使用其他算法, 通过查看openssl的帮助可获知
# openssl aes-128-cbc -salt -in test.txt -out test.txt.aes
enter aes-128-cbc encryption password:<输入密码>
Verifying - enter aes-128-cbc encryption password:<确认密码>
  • 查看加密前后的文件大小, 加密后文件明显增大了
# ll test.txt*
-rw-r--r-- 1 root root 9 Aug 11 15:42 test.txt
-rw-r--r-- 1 root root 32 Aug 11 15:43 test.txt.aes

--查看加密前后的文件内容, 加密后文件无法直接查看, 显示乱码

# cat test.txt
test测试 # cat test.txt.aes
Salted__碾RTqm6棚顱
  • 现在开始解密, 会提示输入密码, 如果密码有误则无法解密
# openssl aes-128-cbc -d -salt -in test.txt.aes -out test.txt.out
enter aes-128-cbc decryption password:<输入错误密码>
bad decrypt
6150:error:06065064:digital envelope routines:EVP_DecryptFinal:bad decrypt:evp_enc.c:438: # openssl aes-128-cbc -d -salt -in test.txt.aes -out test.txt.out
enter aes-128-cbc decryption password:<输入正确密码>
  • 查看解密前后的文件大小, 和加密前是一样的
# ll test.txt*
-rw-r--r-- 1 root root 9 Aug 11 15:42 test.txt
-rw-r--r-- 1 root root 32 Aug 11 15:43 test.txt.aes
-rw-r--r-- 1 root root 9 Aug 11 15:45 test.txt.out
  • 查看解密前后的文件内容, 和加密前是一样的
# cat test.txt.out
test测试

这种方法非常适合Linux下的文件内容保密, 呵呵....以上命令加参数比较复杂, 我们可以把命令加参数做个函数, 然后放到.bash_profile里, 这样每次登陆后直接使用函数即可, 如下:

function encryption()
{
/usr/bin/openssl aes-128-cbc -salt -in $1 -out $1.aes && rm -f $1
}
function decryption()
{
/usr/bin/openssl aes-128-cbc -d -salt -in $1.aes -out $1 && rm -f $1.aes
}

然后就可以如下使用了(注意输入参数都是原文件名, 且会自动删除原文件):

# encryption test.txt
enter aes-128-cbc encryption password:
Verifying - enter aes-128-cbc encryption password: # decryption test.txt
enter aes-128-cbc decryption password:
# ll test.txt*
-rw-r--r-- 1 root root 9 Aug 11 15:46 test.txt
-rw-r--r-- 1 root root 9 Aug 11 15:45 test.txt.out --End--

OpenSSL进行RSA加密解密-非对称加密

RSA是一个非对称加密算法。简单地说,非对称加密算法就是说加密解密一个文件需要两个密钥,一个用来加密,为公钥,一个用来解密,为私钥。证书可以用来授权公钥的使用。

介绍下Linux平台下openssl工具的简单使用:

  • 1、生成一个密钥:
openssl  genrsa  -out  test.key  1024

这里-out指定生成文件。需要注意的是这个文件包含了公钥和私钥两部分,也就是说这个文件既可用来加密也可用来解密。后面的1024是生成密钥的长度。

  • 2、openssl可以将这个文件中的公钥提取出来:
openssl  rsa  -in  test.key  -putout  -out  test_pub.key

-in指定输入文件,-out指定提取生成公钥的文件名。至此,我们手上就有了一个公钥,一个私钥(包含公钥)。现在可以用公钥来加密文件了。

  • 3、在目录中创建一个hello的文本文件,然后利用此前生成的公钥加密文件:
openssl  rsautl  -encrypt  -in  hello  -inkey  test_pub.key  -pubin  -out  hello.en

-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

  • 4、解密文件:
openssl rsautl -decrypt -in hello.en -inkey test.key -out hello.de

-in指定被加密的文件,-inkey指定私钥文件,-out为解密后的文件。

OpenSSl命令行工具验证数字签名:

一、发送方A:

生成私钥:

OpenSSL> genrsa -passout pass:123456 -out apri.pem 1024

生成公钥:

OpenSSL> rsa -passin pass:123456 -pubout -in apri.pem -out apub.pem

用B的公钥加密数据:

OpenSSL> rsautl -encrypt -pubin -inkey bpub.pem -in data.txt -out edata.txt

计算数据的消息摘要:

OpenSSL> dgst -sha1 -out md.txt data.txt

用A的私钥给消息摘要签名:

OpenSSL> rsautl -sign -inkey apri.pem -in md.txt -out signature.bin
将edata.txt和signature.bin发送给接收方B

二、接收方B

生成私钥:

OpenSSL> genrsa -passout pass:654321 -out bpri.pem 1024

生成公钥:

OpenSSL> rsa -passin pass:654321 -pubout -in bpri.pem -out bpub.pem

用B的私钥解密数据:

OpenSSL> rsautl -decrypt -inkey bpri.pem -in edata.txt -out data.txt

计算data.txt的信息摘要:

OpenSSL> dgst -sha1 -out ms2.txt data.txt

用A的公钥解密数字签名:

OpenSSL> rsautl -verify -pubin -inkey apub.pem -in signature.bin -out ms3.txt

最后比较:ms2.txt 和ms3.txt内容完全相同:

SHA1(data.txt)= ad6910d33d5f96cbd7b9b3378107b8b04ba1c138

在windows上也有一些加密软件

如: Fat Crypto Tools 有对称加密和hash功能



[svc]openssl对称非对称加密实战的更多相关文章

  1. 十二张图:从0开始理解对称/非对称加密、CA认证、以及K8S各组件颁发证书原由

    目录 一.对称加密 二.对称加密-不安全 三.非对称加密 四.非对称加密-不安全 五.对称加密和非对称加密结合 六.对称加密和非对称加密结合-不安全 七.Https的做法-引入CA机构 八.乘胜追击理 ...

  2. OpenSSL - RSA非对称加密实现

    非对称加密:即两端使用一对不同的密钥进行加密. 在非对称加密中,需要两对密钥,公钥和私钥. 公钥个私钥属于对立关系,一把加密后,只有另一把才可以进行解密. 公钥数据加密 数字证书内包含了公钥,在进行会 ...

  3. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...

  4. 常见的哈希Hash算法 & MD5 & 对称非对称加密 & 海明码

    参考 Link 另外,这篇文章也提到了利用Hash碰撞而产生DOS攻击的案例: http://www.cnblogs.com/charlesblc/p/5990475.html DJB的算法实现核心是 ...

  5. 聊聊对称/非对称加密在HTTPS中的使用

    目前常用的加密算法主要分成三类: 对称加密算法 非对称加密算法 消息摘要算法 在互联网中,信息防护主要涉及两个方面:信息窃取和信息篡改.对称/非对称加密算法能够避免信息窃取,而消息摘要算法能够避免信息 ...

  6. 支付宝开发(一)-认识php openssl RSA 非对称加密实现

    获取支付宝公钥 本地服务器生成私钥和公钥 运用php中openssl相关函数加密解密验证身份 以下是php中openssl相关函数实现的验证,来自php官方demo //需要签名的数据 $data = ...

  7. RSA非对称加密 php的openssl实现

    <?php /** * 使用openssl实现非对称加密 * @since 2010-07-08 */ class Rsa { /** * private key */ private $_pr ...

  8. 加密解密知识 php非对称加密

    function test1(){ $config = array( "digest_alg" => "sha1", "private_key_ ...

  9. php实现非对称加密

    <?php /** * 使用openssl实现非对称加密 * * @since 2015-11-10 */ class Rsa { /** * 私钥 * */ private $_privKey ...

随机推荐

  1. linux shell cut 命令

    cut命令 cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出. 截取的方式有三种:一是按照字符位置,二是按照字节位置,三是使用一个分隔符将一行分割成多个field,并提取 ...

  2. C++ 冒泡排序、选择排序、快速排序

    #include<stdio.h> #define N 10 void swap(int *p1, int *p2); void BubbleSort(int *a); void Sele ...

  3. Java Web 之javabeans

    Java遇见HTML——JSP篇之JavaBeans: http://www.cnblogs.com/Qian123/p/5277425.html

  4. 洛谷 p1044 栈 【Catalan(卡特兰数)】【经典题】

    题目链接:https://www.luogu.org/problemnew/show/P1044 转载于:https://www.luogu.org/blog/QiXingZhi/solution-p ...

  5. 洛谷 [P1024]一元三次方程求解【二分答案】

    题目链接:https://www.luogu.org/problemnew/show/P1024 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b ...

  6. Git学习笔记:基础篇

    git可以说是所有开发者出开发语言之外的最基本的基本功了,熟悉git可以方便的进行代码版本控制,以及与其他开发者进行合作开发.本文内容是我以往学习git时做的笔记,主要是关于git最基本的操作,但 只 ...

  7. ISO9000和CMM

    ISO9000和CMM,谁更适合软件开发? ISO9000 和 CMM 是国际上通用的软件质量评估和管理方法.二者有很多相似之处,它们的实施都可以改变软件开发的不规范.文档不齐.维护跟不上.质量漏洞多 ...

  8. BZOJ 3930: [CQOI2015]选数 莫比乌斯反演

    https://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://blog.csdn.net/ws_yzy/article/details/5 ...

  9. BZOJ.3598.[SCOI2014]方伯伯的商场之旅(贪心 数位DP)

    题目链接 先考虑,对于确定的一个数,怎样移动代价最少(或者移到哪个位置最优)? 假设我们都移到下标\(1\)位置(设集合点为\(1\)),那么移动到下标\(2\)与\(1\)相比代价差为:\(下标&l ...

  10. 洛谷.2596.[ZJOI2006]书架(Splay)

    题目链接 /* 五个操作: 1.将某元素置顶.删掉这个数,插入最左 2.将某元素置底.同样 3.旋到根后,直接将这个数与前驱/后继交换所有信息 不是左右子节点! 4.5.裸平衡树 ps:1.用pos[ ...