1.首先要了解,银行和那些网络钱包接口的原理
首先你会有一个公钥和私钥,私钥给了银行用来解密你发的信息。开始你用你的公钥加密订单信息,发送给银行,银行用私钥解密,如果证明是你发的信息,就用你的公钥加密返回信息传给你,你再用私钥解密。
RSA/DSA/SHA/MD5
非对称加密的算法有很多,比较著名的有RSA/DSA ,不同的是RSA可以用于加/解密,也可以用于签名验签,DSA则只能用于签名.至于SHA则是一种和md5相同的算法,它不是用于加密解密或者签名的,它被称为摘要算法.就是通过一种算法,依据数据内容生成一种固定长度的摘要,这串摘要值与原数据存在对应关系,就是原数据会生成这个摘要,但是,这个摘要是不能还原成原数据的,嗯....,正常情况下是这样的,这个算法起的作用就是,如果你把原数据修改一点点,那么生成的摘要都会不同,传输过程中把原数据给你再给你一个摘要,你把得到的原数据同样做一次摘要算法,与给你的摘要相比较就可以知道这个数据有没有在传输过程中被修改了.
实际应用过程中,因为需要加密的数据可能会很大,进行加密费时费力,所以一般都会把原数据先进行摘要,然后对这个摘要值进行加密,将原数据的明文和加密后的摘要值一起传给你.这样你解开加密后的摘要值,再和你得到的数据进行的摘要值对应一下就可以知道数据有没有被修改了,而且,因为私钥只有你有,只有你能解密摘要值,所以别人就算把原数据做了修改,然后生成一个假的摘要给你也是不行的,你这边用密钥也根本解不开.
2.解释openssl_sign和openssl_verify的参数
openssl_sign:
data
需要加密的数据
signature
加密完成后生成的数据
pub_key_id
公钥
signature_alg
加密的算法
openssl_sign($signStr,$sign_info,$merchant_private_key,OPENSSL_ALGO_MD5);
openssl_verify:
data
传过来没有加密的数据
signature
传过来加密过的数据
pub_key_id
私钥
signature_alg
加密算法
$flag = openssl_verify($signStr,$sign,$dinpay_public_key,OPENSSL_ALGO_MD5)
当最后接收到服务器返回的信息用私密解密以后,得到$flag为1表示验签成功,0便是验签失败。
这些看不懂也没关系,可以去我的GitHub查看例子。例子是我用go转接的,通俗易懂。喜欢的请点赞一下。