openssl 非对称加密DSA,RSA区别与使用介绍(转)
1. openssl RSA 加解密
RSA是基于数论中大素数的乘积难分解理论上的非对称加密法,使用公私钥的方法进行加解密
公钥 用于加密,它是向所有人公开的 ; 私钥用于解密,只有密文的接收者持有。
- 生成一个密钥(私钥)
- [root@hunterfu ~]# openssl genrsa -out private.key 1024
- 注意: 需要注意的是这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密,后面的1024是生成密钥的长度.
- 通过密钥文件private.key 提取公钥
- [root@hunterfu ~]# openssl rsa -in private.key -pubout -out pub.key
- 使用公钥加密信息
- [root@hunterfu ~]# echo -n "123456" | openssl rsautl -encrypt -inkey pub.key -pubin >encode.result
- 使用私钥解密信息
- [root@hunterfu ~]#cat encode.result | openssl rsautl -decrypt -inkey private.key
- 123456
至此,一次RSA加密解密的过程已经完成!
2. openssl DSA签名与验证
和RSA加密解密过程相反,在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多.
- 生成一个密钥(私钥)
- [root@hunterfu ~]# openssl dsaparam -out dsaparam.pem 1024
- [root@hunterfu ~]# openssl gendsa -out privkey.pem dsaparam.pem
- 生成公钥
- [root@hunterfu ~]# openssl dsa -in privkey.pem -out pubkey.pem -pubout
- [root@hunterfu ~]# rm -fr dsaparam.pem
- 使用私钥签名
- [root@hunterfu ~]# echo -n "123456" | openssl dgst -dss1 -sign privkey.pem > sign.result
- 使用公钥验证
- [root@hunterfu ~]# echo -n "123456" | openssl dgst -dss1 -verify pubkey.pem -signature sign.result
- Verified OK
至此,一次DSA签名与验证过程完成!
3. 总结及注意事项
注意: 由于信息经过加密或者签名后,都变成不可读模式,为了方便终端查看和传输使用(url提交数据,需要作urlencode操作),可以使用base64进行编码
- openssl enc -base64 -A :将加密后的信息使用base64编码
- openssl enc -d -base64 -A : 将信息使用base64反编码
- java中此私钥需要转换下格式才能使用:
- [root@hunterfu ~]# openssl pkcs8 -topk8 -nocrypt -in private.key -outform PEM -out java_private.key
当然openssl 是一个很实用的加密工具包,还有很多东西值得学习和总结,以后有空再说!
openssl 非对称加密DSA,RSA区别与使用介绍(转)的更多相关文章
- openssl 非对称加密DSA,RSA区别与使用介绍
在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多需求! 1. openssl RSA 加解密 RSA是基于数论中大素数的乘积难分解理论上的非对称加密法,使用公私钥 ...
- 加密算法(对称加密)AES、DES (非对称加密)RSA、DSA
目前主流的加密方式有:(对称加密)AES.DES (非对称加密)RSA.DSA
- 非对称加密技术- RSA算法数学原理分析
非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...
- openssl 非对称加密算法DSA命令详解
1.DSA算法概述 DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换. DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括 ...
- 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很ea ...
- go加密算法:非对称加密(一)--RSA
椭圆曲线加密__http://blog.51cto.com/11821908/2057726 // MyRas.go package main import ( "crypto/rand&q ...
- 使用java实现对称加密解密(AES),非对称加密解密(RSA)
对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...
- openssl 非对称加密 RSA 加密解密以及签名验证签名
1. 简介 openssl rsa.h 提供了密码学中公钥加密体系的一些接口, 本文主要讨论利用rsa.h接口开发以下功能 公钥私钥的生成 公钥加密,私钥解密 私钥加密,公钥解密 签名:私钥签名 验 ...
- Asp.Net 常用工具类之加密——非对称加密RSA算法
踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...
随机推荐
- POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解
题意:找出第k短路,输出长度,没有输出-1 思路:这题可以用A*做.A*的原理是这样,我们用一个函数:f = g + h 来表示当前点的预期步数,f代表当前点的预期步数,g代表从起点走到当前的步数,h ...
- 关于ActiveMQ、RocketMQ、RabbitMQ、Kafka一些总结和区别
这是一篇分享文 转自:http://www.cnblogs.com/williamjie/p/9481780.html 尊重原作,谢谢 消息队列 为什么写这篇文章? 博主有两位朋友分别是小A和小B: ...
- 07_Flume_regex interceptor实践
实践一:regex filter interceptor 1.目标场景 regex filter interceptor的作用: 1)将event body的内容和配置中指定的正则表达式进行匹配2)如 ...
- POJ 1011 Sticks(dfs+剪枝)
http://poj.org/problem?id=1011 题意:若干个相同长度的棍子被剪成若干长度的小棍,求每根棍子原来的可能最小长度. 思路:很经典的搜索题. 我一开始各种超时,这题需要很多剪枝 ...
- MYSQL语句:创建、授权、查询、修改、统计分析等 一 用户的创建、权限设置、删除等
MYSQL语句:创建.授权.查询.修改.统计分析.. 一.用户的创建.权限设置.删除等 1.首先链接MySQL操作 连接格式:mysql -h 主机地址 -u 用户名 -p 用户密码 (注-u与roo ...
- 使用wsHttpBinding构建Message安全模式和UserName授权
http://www.cnblogs.com/artech/archive/2011/05/22/authentication_01.html https://www.cnblogs.com/Fran ...
- C# 二进制图片串互转
C# byte数组与Image的相互转换 功能需求: 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库. 2.把从数据库读取的byte数组转换为Image对 ...
- java基础深入解析基本类型
一.基本类型的简介 基本类型的两条准则: Java中,如果对整数不指定类型,默认时int类型,对小数不指定类型,默认是double类型. 基本类型由小到大,可以自动转换,但是由大到小,则需要强制类型转 ...
- 《剑指offer》第十七题(打印1到最大的n位数)
// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <ios ...
- Codeforces 496C - Removing Columns
496C - Removing Columns 思路:暴力,用vis标记数组实时记录一下之前的行i+1和上一行i否全相等,false表示全相等. 代码: #include<bits/stdc++ ...