Use of PHP---RSA algorithm

php rsa encryption and decryption,
[helpful for WeChat payment v3 encryption, decryption, signature, and signature verification
]

//res performs private key encryption, remember that all secret keys must be left-aligned, and the right is the Enter key

function Rsacheck($data){
    
    
	$PRIVATEkey="-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDRCtcvAda7ieyk
U3RUj+wYGWfyxcJ8043afywnYjj9+S0TJCPI65l7SvCr6q8s3Epsisxt2r/j5chB
x8YEwj/w0xUf8Gnuuz5puJpPAgIOwJcjyA+mvXa1YrS/PuvqlMtTxH0q+CoJjQs1
+3vdRr07dKSvc1s0A4n/EDwe3vAr2wc7vAfGAzRdZpSFnLRrGuCuydjcc2aQ2fQd
w1Lpl2vi8RP5q/KVlDuQ4WfW7gSG9hRjA6+gOVr93G+iNRalr1qO9imy6dU/WDlM
jKELoOENEYUMQCDc711iDg77Fpo1rSZHqSYvKXLMb8eMrG1T55sQQtSm+kMxqb34
rLSjPxPzAgMBAAECggEBAJ8rHu+2+bbwbRQuSzx8Hau35JNRCyaaur8s6ATQ4E5Z
pX2WnfzFj6b2R8zPNDT3Q1/kS4Y18rhnZRTZNSi4c5E+WC5qk25oejxriGsyPzjW
Yf6nvWsbhkDUeIXKNj32r98HlLrcHL4K/AdNhmHVFA8qYJ8LOd2f+DoTNYPYAo2Q
pyvqzFPa6tq1EQdZfTC5AZQdbidREj1U21ao1CewxmZrCNLCHT2J/2p8CtP7kvIW
dLNC2KJqFDNvdKUWuijI05GW5Q9c706hrVcyVff5d12b5aTeoA6Q5jvsARJHhfml
Kq8aUe7+tBdPA8BI9bO4HHIbP63KWZKKeyByEvpDWEkCgYEA79muQpRreJ7WSJrZ
SrtQkmLCPHEsNQrRH4bF73U6rZ5k6s6MJ6BDNOJlWGS496LOmYihs4Bz14uXHvCt
Z+GGNJKhrMrkMFDxsax4yFabF61nJukRjpwC3jukrE2n9hK+Pa6ETM74+tFiEgH9
5SiFDIm5yw80wTXjBXvoKdYCCj8CgYEA3x4e0llmxxwPqhGV8QTnWJulBKzoNKqS
K+xHHr0RNiIGQeBY6shMU708kWHz7GIWV1QCx6lqRox7hSGTbKF5ztup9+kqhYLh
+2dB71w85J1MQPFh0Rt5UL5ZrpzT9JDy4K0F9dNzUG6mnkpR/oN7I718acsajbts
XBlHDm34QU0CgYBUXmDy4JxxQIYl4fpfVEaCR6UFd9XSDq0DBvhnQ/hRDC95fRBF
/BTH7H8zubJqwWUlEq+2oY+eGWceJhEJQoZfxdiDHJdp+38ZPY77AaPqjz+Cq2dW
n8BOhfJl/acAYxVyQwocro1cRPzXUsYJrtgmUef96qpm8FqcGjrPRI1RJwKBgQCZ
LvHUU4MH4tEyX16FmmtHX5z9R8UpG469zzvI89/UPan0IpaJozkcKQlje0/gFDvo
ewppkHwhsaPAdJvl8jtR9WiNh60k+wYx9+PB9Z7tCr3mvJL+4RD6iaXDB3NSLw5B
iSlVbHZ4W2/Tr4z548VwdVDsxYAWnP45gTVSx9ew5QKBgQCq60Ym/8QPDBf1dibF
KDmpblAitO+IqCZ21wih6vDT2G0V9vYYNPS679CaSlYKDgm5sD1+XCI/ceaUE/UM
tqsjYVdHHbXjQz2ScLmO599R5SbTUQ3nOUYVVvyPqhpLiuUYUoZycGNoI5UwwWJ7
4ijzU25Oyk/EhatM9zZZyJ3yGw==
-----END PRIVATE KEY-----";
	$data="ceshi";
	//必须通过openssl的方法进行读取rsa的私钥否则如果直接用私钥进行加密的话会会出现乱
	$res=openssl_get_privatekey($PRIVATEkey);
	//ras使用私钥进行加密,第一个是需要加密的参数,第二个是一个空参数【存放结果】,第三个是私钥
	$res=openssl_private_encrypt($data,$decrypt,$res);
	//经过上面的加密后还是需要最后一步进行base64_encode的加密,encode是加密,decode是解密
	$sign=base64_encode($decrypt);
	var_dump($sign);die;
}

//rsa public key decryption ----- keep the public key properly

function check2($data){
    
    
	$publickey="-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0QrXLwHWu4nspFN0VI/s
GBln8sXCfNON2n8sJ2I4/fktEyQjyOuZe0rwq+qvLNxKbIrMbdq/4+XIQcfGBMI/
8NMVH/Bp7rs+abiaTwICDsCXI8gPpr12tWK0vz7r6pTLU8R9KvgqCY0LNft73Ua9
O3Skr3NbNAOJ/xA8Ht7wK9sHO7wHxgM0XWaUhZy0axrgrsnY3HNmkNn0HcNS6Zdr
4vET+avylZQ7kOFn1u4EhvYUYwOvoDla/dxvojUWpa9ajvYpsunVP1g5TIyhC6Dh
DRGFDEAg3O9dYg4O+xaaNa0mR6kmLylyzG/HjKxtU+ebEELUpvpDMam9+Ky0oz8T
8wIDAQAB
-----END PUBLIC KEY-----"
	$data1="加密完内容";
	//拿到已经加密的密文,首先进行base64_decode的解密
	$data=base64_decode($data1);
	//对经过base64_decode解密的密文,进行rsa公钥解密,跟加密的时候参数位置一样
	$res=openssl_public_decrypt($data,$decrypt,$publickey);
	var_dump($decrypt);die;
}

//ras for private key signing

//The following uses rsa to sign and call the open_sign method to sign. Note: this is a signature, not an encryption. The signed ciphertext and encrypted ciphertext are different, remember!

function check3($data){
    
    
	$PRIVATEkey="-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDRCtcvAda7ieyk
U3RUj+wYGWfyxcJ8043afywnYjj9+S0TJCPI65l7SvCr6q8s3Epsisxt2r/j5chB
x8YEwj/w0xUf8Gnuuz5puJpPAgIOwJcjyA+mvXa1YrS/PuvqlMtTxH0q+CoJjQs1
+3vdRr07dKSvc1s0A4n/EDwe3vAr2wc7vAfGAzRdZpSFnLRrGuCuydjcc2aQ2fQd
w1Lpl2vi8RP5q/KVlDuQ4WfW7gSG9hRjA6+gOVr93G+iNRalr1qO9imy6dU/WDlM
jKELoOENEYUMQCDc711iDg77Fpo1rSZHqSYvKXLMb8eMrG1T55sQQtSm+kMxqb34
rLSjPxPzAgMBAAECggEBAJ8rHu+2+bbwbRQuSzx8Hau35JNRCyaaur8s6ATQ4E5Z
pX2WnfzFj6b2R8zPNDT3Q1/kS4Y18rhnZRTZNSi4c5E+WC5qk25oejxriGsyPzjW
Yf6nvWsbhkDUeIXKNj32r98HlLrcHL4K/AdNhmHVFA8qYJ8LOd2f+DoTNYPYAo2Q
pyvqzFPa6tq1EQdZfTC5AZQdbidREj1U21ao1CewxmZrCNLCHT2J/2p8CtP7kvIW
dLNC2KJqFDNvdKUWuijI05GW5Q9c706hrVcyVff5d12b5aTeoA6Q5jvsARJHhfml
Kq8aUe7+tBdPA8BI9bO4HHIbP63KWZKKeyByEvpDWEkCgYEA79muQpRreJ7WSJrZ
SrtQkmLCPHEsNQrRH4bF73U6rZ5k6s6MJ6BDNOJlWGS496LOmYihs4Bz14uXHvCt
Z+GGNJKhrMrkMFDxsax4yFabF61nJukRjpwC3jukrE2n9hK+Pa6ETM74+tFiEgH9
5SiFDIm5yw80wTXjBXvoKdYCCj8CgYEA3x4e0llmxxwPqhGV8QTnWJulBKzoNKqS
K+xHHr0RNiIGQeBY6shMU708kWHz7GIWV1QCx6lqRox7hSGTbKF5ztup9+kqhYLh
+2dB71w85J1MQPFh0Rt5UL5ZrpzT9JDy4K0F9dNzUG6mnkpR/oN7I718acsajbts
XBlHDm34QU0CgYBUXmDy4JxxQIYl4fpfVEaCR6UFd9XSDq0DBvhnQ/hRDC95fRBF
/BTH7H8zubJqwWUlEq+2oY+eGWceJhEJQoZfxdiDHJdp+38ZPY77AaPqjz+Cq2dW
n8BOhfJl/acAYxVyQwocro1cRPzXUsYJrtgmUef96qpm8FqcGjrPRI1RJwKBgQCZ
LvHUU4MH4tEyX16FmmtHX5z9R8UpG469zzvI89/UPan0IpaJozkcKQlje0/gFDvo
ewppkHwhsaPAdJvl8jtR9WiNh60k+wYx9+PB9Z7tCr3mvJL+4RD6iaXDB3NSLw5B
iSlVbHZ4W2/Tr4z548VwdVDsxYAWnP45gTVSx9ew5QKBgQCq60Ym/8QPDBf1dibF
KDmpblAitO+IqCZ21wih6vDT2G0V9vYYNPS679CaSlYKDgm5sD1+XCI/ceaUE/UM
tqsjYVdHHbXjQz2ScLmO599R5SbTUQ3nOUYVVvyPqhpLiuUYUoZycGNoI5UwwWJ7
4ijzU25Oyk/EhatM9zZZyJ3yGw==
-----END PRIVATE KEY-----";
	$data="ceshi";
	//必须通过openssl的方法进行读取rsa的私钥否则如果直接用私钥进行加密的话会会出现乱
	$res=openssl_get_privatekey($PRIVATEkey);
	//ras使用私钥进行加密,第一个是需要加密的参数,第二个是一个空参数【存放结果】,第三个是私钥,这里出现了第四个参数,OPENSSL_ALGO_MD5,这个是MD5实现的是MD5withRSA签名的算法
	openssl_sign($data,$sign,$res,OPENSSL_ALGO_MD5);
	//经过上面的加密后还是需要最后一步进行base64_encode的加密,encode是加密,decode是解密
	$sign=base64_encode($sign);
	var_dump($sign);die;
}

//RSA public key for signature verification

function check4($data){
    
    
	$publickey="-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0QrXLwHWu4nspFN0VI/s
GBln8sXCfNON2n8sJ2I4/fktEyQjyOuZe0rwq+qvLNxKbIrMbdq/4+XIQcfGBMI/
8NMVH/Bp7rs+abiaTwICDsCXI8gPpr12tWK0vz7r6pTLU8R9KvgqCY0LNft73Ua9
O3Skr3NbNAOJ/xA8Ht7wK9sHO7wHxgM0XWaUhZy0axrgrsnY3HNmkNn0HcNS6Zdr
4vET+avylZQ7kOFn1u4EhvYUYwOvoDla/dxvojUWpa9ajvYpsunVP1g5TIyhC6Dh
DRGFDEAg3O9dYg4O+xaaNa0mR6kmLylyzG/HjKxtU+ebEELUpvpDMam9+Ky0oz8T
8wIDAQAB
-----END PUBLIC KEY-----"
	$data1="ceshi";
	$sign="**************签名********************"
	//必须调用openssl的方式获得公钥,否则不行
	$res=openssl_get_publickey($publickey);
	//$data是签名参数,$sign是需要验签的签名,先对签名进行base64_decode解密,然后对签名密文进行MD5withRSA进行验签,验签是调用openssl内置方法验签,返回bool值
	$result=(bool)openssl_verify($data,base64_decode($sign),$res,OPENSSL_ALGO_MD5);
	var_dump($result);die;
}

Guess you like

Origin blog.csdn.net/wkj001/article/details/129093672