文档章节

加密、解密、签名

麦拂沙
 麦拂沙
发布于 2015/11/03 18:52
字数 508
阅读 217
收藏 0
点赞 0
评论 0

常见加密算法:

  • 非对称加密算法: RSA、ECC、DH
  • 对称加密算法:AES、DES、RC4
  • hash算法:MD5、SHA1、SHA256

加密与签名

  • 私钥签名, 公钥验签
  • 公钥加密, 私钥解密
openssl genrsa -out key.pem 1024  #生成pem格式私钥

openssl rsa -in key.pem -pubout -out pubkey.pem  #提取pem格式公钥(-----BEGIN PUBLIC KEY----------BEGIN PUBLIC KEY-----)
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem  #提取pem RSAPublicKey格式公钥(-----BEGIN RSA PUBLIC KEY-----)

openssl rsautl -encrypt -in input.file -inkey pubkey.pem -pubin -out output.file  #公钥加密文件
openssl rsautl -decrypt -in input.file -inkey key.pem -out output.file      #私钥解密文件

MD5withRSA签名 :

  • 生成签名
    1. 对数据MD5取摘要
    2. 对摘要进行RSA私钥加密获得签名
  • 签名校验
    1. RSA公钥解密接收到的签名获得原始MD5摘要
    2. 对接收到的数据直接MD5取摘要
    3. 校验两个摘要值
/***************************** MD5withRSA非对称加密下的签名/校验 PHP示例 *****************************/
    /**
     * 生成签名
     * @param $pri_key_path 私钥地址 或 内容
     * @param $signature_alg 签名算法常量, 如OPENSSL_ALGO_SHA1、OPENSSL_ALGO_MD5
     * @param $content 需要签名的内容
     */
    public function rsaSign($pri_key_path, $signature_alg, $content) {
        $res = openssl_pkey_get_private($pri_key_path);
        openssl_sign($content, $sign, $res, $signature_alg);
        openssl_free_key($res);
        $sign = base64_encode($sign);  # 对签名base64加密,避免其中的非ASCII字符在传输中丢失
        return $sign;
    }

    /**
     * 验证签名
     * @param $pub_key_path 公钥地址 或 内容
     * @param $signature_alg 签名算法常量, 如OPENSSL_ALGO_SHA1、OPENSSL_ALGO_MD5
     * @param $content 签名的内容
     * @param $sign 签名
     */
    public function rsaVerifySign($pub_key_path, $signature_alg, $content, $sign) {
        $sign = base64_decode($sign);
        $res = openssl_pkey_get_public($pub_key_path);
        $ret = openssl_verify($content, $sign, $res, $signature_alg);
        openssl_free_key($res);

        return $ret == 1;
    }

java-php加密通信

  • php直接基于openssl秘钥来进行加密处理
  • java一般会对openssl秘钥去头去尾合并单行处理
  • java加密php解密时,java的cipher必须使用RSA/ECB/PCKS1Padding,不能是RSA
  • java秘钥转php秘钥格式
    function translateJavakey2Phpkey($javaKeyStr, $isPublicKey){
        $keyContent = trim(chunk_split(str_replace(["\r","\n"], '', $javaKeyStr), 64, "\n"));

        return $isPublicKey
                    ? printf("-----BEGIN PUBLIC KEY-----\n%s\n-----END PUBLIC KEY-----\n", $keyContent);
                    : printf("-----BEGIN PRIVATE KEY-----\n%s\n-----END PRIVATE KEY-----\n", $keyContent);
    }

SSH-KEY生成

# 生成RSA加密类型的秘钥,导出两个文件:
# 公钥 ~/.ssh/id_rsa.pub
# 私钥 ~/.ssh/id_rsa
ssh-keygen -t rsa -C "邮箱" -b 4096

© 著作权归作者所有

共有 人打赏支持
麦拂沙
粉丝 21
博文 101
码字总数 95668
作品 1
海淀
高级程序员
公钥与私钥简单叙述

不对称加密方式 公钥:(公共使用)加密 私钥:(仅自己使用,严格保密)解密 简单来说:用公钥加密的信息,只有通过其私钥可以解密。 例子: A→B (简单发送) 1:A要对B的发送信息,为了保...

玄影镜心 ⋅ 2016/01/30 ⋅ 0

RSA加密解密及数字签名Java实现

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三...

Jialy ⋅ 2013/10/25 ⋅ 5

openssl 非对称加密DSA,RSA区别与使用介绍

openssl RSA 加解密 RSA是基于数论中大素数的乘积难分解理论上的非对称加密法,使用公私钥的方法进行加解密 公钥 用于加密,它是向所有人公开的 ; 私钥用于解密,只有密文的接收者持有 生成一...

伽罗kapple ⋅ 2016/02/22 ⋅ 0

Web开发必须了解的密码学技术

对称加密与非对称加密 按照密钥的使用形式,加密算法可以分为对称加密和非对称加密(又叫公钥加密)。对称加密在加密和解密的过程中,使用相同的秘钥;而非对称加密在加密过程中使用公钥进行...

邱振源的博客 ⋅ 2017/11/14 ⋅ 0

加密-上课内容

对称加密算法 -c:使用对称加密 -s:签名 [root@localhost tmp]# gpg -c etc-2015-09-08.tar.bz2[root@localhost tmp]# lsetc initramfs-3.10.0-123.el7.x86_64.img systemd-private-VeulCaetc......

chomperwu ⋅ 2015/09/17 ⋅ 0

数字签名工作原理

数字签名是指发送方用自己的私钥对数字指纹进行加密后所得的数据,其中包括非对称密钥加密和数字签名两个过程,在可以给数据加密的同时,也可用于接收方验证发送方身份的合法性。采用数字签名...

茶乡浪子 ⋅ 2017/09/25 ⋅ 0

对于加密解密的初步了解

由于工作任务的分配,最近把之前丢下的加密与解密的内容捡了起来,本篇博文不会涉及加密算法的原理以及具体实现,有时间会深究其原理,这篇博文主要是对加密算法的概括以及Java中常用加密算法...

GeneralAndroid ⋅ 2017/12/06 ⋅ 0

公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS

对公钥和私钥有点稀里糊涂的,搜索了一些资料,作一些整理吧,先看这个: 加密--公钥 解密--私钥 签名--私钥 验证--公钥 看了这个也许会对私钥用于签名不解,其实它等同于用私钥加密,而公钥...

yoyoso ⋅ 2014/12/22 ⋅ 0

​​​​​​​RSA数字签名与加密、解密间的关系 

RSA数字签名与加密、解密间的关系 提及RSA,大家会想到公钥、私钥、加密、解密、数字签名、数字信封。。。 但也许大家和曾经的我一样,对其中的某些理解会存在误区,最近看了下关于RSA的RFC...

法斗斗 ⋅ 2016/06/01 ⋅ 0

java服务端、php、C#客户端rsa

最近公司项目需要用到rsa,故对rsa签名算法的一些概念和不同语言的使用进行了研究(具体实现算法则不钻牛角尖了) 对rsa算法的个人理解 什么是RSA签名、验签、加密解密1、rsa算法为非对称加密...

jason-寒江雪 ⋅ 2015/12/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 13分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 24分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 54分钟前 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 54分钟前 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部