文档章节

加密、解密、签名

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

© 著作权归作者所有

共有 人打赏支持
麦拂沙
粉丝 22
博文 111
码字总数 99706
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

71.告警系统主脚本 配置文件 监控项目

20.20 告警系统主脚本(main.sh) 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本(main.sh): ~1.约定:把以后所有的shell脚本放在/usr/local/sbin下,也方便我们查...

王鑫linux
5分钟前
0
0
装饰者模式

装饰者模式 Q:何为装饰模式? ()地给一个对象添加一些额外的(),并且()时,并不影响原对象。扩展功能来说,装饰器模式相比生成子类更为灵活。 Q:使用场景? 1.想要在不影响其他对象的情况下...

阿元
26分钟前
0
0
GO 切片(slice)相关语法

package mainimport("fmt")func main() {var intArr [5]int = [...]int{1,2,3,4,5} //定义一个数组slice := intArr[2:4] //第二个(包含)下标到第四个下标(不包含)fmt.Println...

汤汤圆圆
27分钟前
0
0
活动招募 HUAWEI HiAI公开课·北京站-如何在4小时把你的APP变身AI应用

人工智能和机器学习是全球关注的新趋势,也是当前最火爆、最流行的话题。当你拿手机用语音助手帮你点外卖,智能推荐帮你把周边美食一网打尽;当你拿起P20拍照时,它将自动识别场景进行最美优...

华为终端开放实验室
42分钟前
1
0
匹配两位小数,js正则

var regex = /^\d*(\.[1-9]|\.\d[1-9])*$/ console.log(1.2,regex.test(1.2)); console.log(0.3,regex.test(0.3)); console.log(1.03,regex.test(1.03)); ......

微信小程序-暗潮
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部