资讯专栏INFORMATION COLUMN

PHP 与 C++ RSA加解密问题记录

testHs / 517人阅读

摘要:第二次访问接口,客户端需使用返回公钥加密访问参数,之后将加密后的参数和一起发送给服务端进行验证。关于函数的详细介绍可以看上一位朋友的博客,链接在此简单总结用加密公钥传递给用公钥加密信息传递给解密

RSA非对称加密,在网络鉴权中使用很多。本人也是在PHP与C++交互鉴权时出现问题,在解决问题过程中发现,网上对相关问题的描述很少,所在这里记录下,希望对遇到相似问题的朋友有所帮助。

问题情景:

由于项目需求,需要PHP写接口提供给C++调用,在接口返回数据之前,需要对访问者进行鉴权已增加数据访问安全性。

针对需求,我们采用的是两次握手完成鉴权。

第一次访问接口不带参数,接口返回token和RSA公钥(公钥用base64加密,方便传输)。

第二次访问接口,客户端需使用返回公钥加密访问参数,之后将加密后的参数和token一起发送给服务端进行验证。服务端收到访问数据后,对加密参数用私钥解密,检查参数是否符合要求,完成鉴权过程。

我们的问题出现在第二次访问时,发送过来的加密参数,无法通过私钥解密。

注:公钥和私钥有PHP生成,使用这对公钥私钥可以在PHP端完成加解密,使用相同的公钥私钥也可以在C++端完成加解密,但两者互通就会出现问题。

解决过程:

直接上正确思路,我们使用相同公钥对相同参数进行加密后发现,两者长度相差很大,于是判定应该是加密后两者的编码方式不同,据我了解RSA加密后C++端应该是输出十六进制的密文,而PHP使用openssl_public_encrypt 公钥加密后的密文应该是ASCII码字符串,两者长度相差很大。

根据以上判断,C++发送给PHP的是十六进制密文,而使用openssl_private_decrypt解密需要的是ASCII码字符串,当然解不出来了。既然知道问题所在,那我们把十六进制的密文转换成ASCII码字符串不就可以解决问题了,于是在PHP端使用pack("H*", param) 转码密文,之后果然顺利解密。

关于pack函数的详细介绍可以看OSC上一位朋友的博客,链接在此

简单总结:

1.用pack(“H*”)

2.php base64加密公钥传递给C++

3.C++ 用公钥加密信息 post传递给PHP解密

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28343.html

相关文章

  • Golang 实现RSA 解密(附带php

    摘要:安全总是很重要的,各个语言对于通用的加密算法都会有实现。对于和加密算法本身,请查阅相关资料在中,很多功能经常是一个函数解决而中的却不是。该文讨论加密解密。一概要这是一个非对称加密算法,一般通过公钥加密,私钥解密。 安全总是很重要的,各个语言对于通用的加密算法都会有实现。前段时间,用Go实现了RSA和DES的加密解密,在这分享一下。(对于RSA和DES加密算法本身,请查阅相关资料) 在P...

    kun_jian 评论0 收藏0
  • 利用RSA对前后端密的探索

    摘要:项目地址前后端交互时为了保证信息安全可使用方式加密信息,在数据量大的时候可采用结合方式。由于加密和解密使用同样规则简称密钥,这被称为对称加密算法。从那时直到现在,算法一直是最广为使用的非对称加密算法。 RSA-JS-PHP 项目地址rsa-js-php 前后端交互时为了保证信息安全可使用RSA方式加密信息,在数据量大的时候可采用DES+RSA结合方式。DEMO演示地址 一点历史 1...

    banana_pi 评论0 收藏0
  • 登陆认证、web api接口调用、支付接口调用等场合经常涉及到:md5、sh、 rsa等算法

    摘要:简介地址实际项目中的登陆认证接口调用支付接口调用等场合经常涉及到等算法。各大银行接口中经常使用算法对调用接口参数进行签名防篡改。使用端见端见特点便于理解,使用广泛。这就使加密的计算量很大。对方收到信息后,用不同的密钥解密并可核对信息摘要。 PHP-RSA简介 github 地址 https://github.com/lmxdawn/PH... 实际项目中的登陆认证、web api接口调...

    Bryan 评论0 收藏0
  • 登陆认证、web api接口调用、支付接口调用等场合经常涉及到:md5、sh、 rsa等算法

    摘要:简介地址实际项目中的登陆认证接口调用支付接口调用等场合经常涉及到等算法。各大银行接口中经常使用算法对调用接口参数进行签名防篡改。使用端见端见特点便于理解,使用广泛。这就使加密的计算量很大。对方收到信息后,用不同的密钥解密并可核对信息摘要。 PHP-RSA简介 github 地址 https://github.com/lmxdawn/PH... 实际项目中的登陆认证、web api接口调...

    Charles 评论0 收藏0
  • 登陆认证、web api接口调用、支付接口调用等场合经常涉及到:md5、sh、 rsa等算法

    摘要:简介地址实际项目中的登陆认证接口调用支付接口调用等场合经常涉及到等算法。各大银行接口中经常使用算法对调用接口参数进行签名防篡改。使用端见端见特点便于理解,使用广泛。这就使加密的计算量很大。对方收到信息后,用不同的密钥解密并可核对信息摘要。 PHP-RSA简介 github 地址 https://github.com/lmxdawn/PH... 实际项目中的登陆认证、web api接口调...

    Half 评论0 收藏0

发表评论

0条评论

testHs

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<