文档章节

加密、解密、签名

麦拂沙
 麦拂沙
发布于 2015/11/03 18:52
字数 508
阅读 252
收藏 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

© 著作权归作者所有

共有 人打赏支持
上一篇: Laravel学习笔记
下一篇: JS基础知识杂项
麦拂沙
粉丝 22
博文 113
码字总数 100110
作品 1
海淀
高级程序员
私信 提问
公钥与私钥简单叙述

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

玄影镜心
2016/01/30
114
0
openssl 非对称加密DSA,RSA区别与使用介绍

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

伽罗kapple
2016/02/22
139
0
​​​​​​​RSA数字签名与加密、解密间的关系 

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

法斗斗
2016/06/01
31
0
java服务端、php、C#客户端rsa

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

jason-寒江雪
2015/12/14
716
0
openssl 加密解密原理小结

公司一个项目要进行交易数据传输,因为这个项目银行那边也是刚刚开始启动,所有的支持只有一个传输字段的说明文档,好吧,总的有人做事不是嘛,于是接口开发正式展开,第一步的难点就是加密解密,我...

bdstravel
2014/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Andrew Ng教你如何引领公司进入AI时代

摘要: 人工智能时代,企业转型遇到困难?看看Andrew Ng的建议吧! AI(人工智能)技术就像100年前的电力一样,正准备改变每个行业。从现在到2030年,它将创造约13万亿美元的GDP增长。虽然它...

阿里云官方博客
18分钟前
1
0
斗图咖(www.doutuka.com)上线纪念

网站名称:斗图咖 网站描述:是一款年轻人都在玩的斗图网站,来斗图咖一起斗图装逼交朋友吧。站长每天上传收集的最新最火斗图,供大家娱乐聊天发表情;后期也会开发表情自主设计,自己设计表...

focusone
39分钟前
4
0
Spring AOP 切面编程记录日志和接口执行时间

最近客户现在提出系统访问非常慢,需要优化提升访问速度,在排查了nginx、tomcat内存和服务器负载之后,判断是数据库查询速度慢,进一步排查发现是因为部分视图和表查询特别慢导致了整个系统...

编程SHA
50分钟前
8
0
15个Spring的核心注释示例

众所周知,Spring DI和Spring IOC是Spring Framework的核心概念。让我们从org.springframework.beans.factory.annotation和org.springframework.context.annotation包中探索一些Spring核心注......

java菜分享
56分钟前
2
0
[LintCode] Binary Tree Level Order Traversal(二叉树的层次遍历)

描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [...

honeymose
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部