博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
加密、解密、签名
阅读量:6895 次
发布时间:2019-06-27

本文共 2384 字,大约阅读时间需要 7 分钟。

hot3.png

常见加密算法:

  • 非对称加密算法: 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_rsassh-keygen -t rsa -C "邮箱" -b 4096

转载于:https://my.oschina.net/u/2400083/blog/525466

你可能感兴趣的文章
与Bob McWhirter的问答:WildFly Swarm更名为Thorntail项目
查看>>
Java 11正式发布,新特性解读
查看>>
《Fit for Purpose》作者访谈录
查看>>
与Brian Goetz聊Java的数据类
查看>>
Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数
查看>>
区块链将颠覆游戏业,游戏内商品未来也可带出游戏、自由交易
查看>>
Linux/Mac安装oh-my-zsh后不执行~/.bash_profile、~/.bashrc解决办法
查看>>
安卓开发_深入理解广播机制
查看>>
技术大咖云集,GIAC 2017全球互联网架构大会圆满落幕
查看>>
php取整函数ceil,floor,round,intval函数的区别
查看>>
elk5.x环境搭建与常用插件安装
查看>>
MySQL大表删除导致服务器变慢的分析
查看>>
windows server操作系统一定要关闭开机磁盘自检
查看>>
Java解析Excel文件
查看>>
MySQL数据类型简介
查看>>
由于未预料的错误,现在无法使用nautilus
查看>>
python很low的三级菜单(六)
查看>>
Go语言之Writer 和 Reader
查看>>
linux 位置参数 特殊变量 read grep 变量赋值
查看>>
spool+sql拼接实现导出结果集为csv格式文件
查看>>