php私钥sha1withrsa签名,rsa私钥解密,aes加解密
2017-11-21 阅读数:258

记录自己在一次对接第三方支付中使用的sha1withrsa签名算法:

/**
 * 签名数据:
 * data:utf-8编码的订单原文,
 * privatekeyFile:私钥路径
 * passphrase:私钥密码
 * 返回:base64转码的签名数据
 */
function sha1withrsa($data) {
	$privatekeyFile = dirname(dirname(dirname(dirname(__DIR__)))) . '/conf/rsa_private_key2.pem';
	$passphrase = '';
	$signature = '';
	$privatekey = openssl_pkey_get_private(file_get_contents($privatekeyFile), $passphrase);
	$res = openssl_get_privatekey($privatekey);
	openssl_sign($data, $signature, $res);
	openssl_free_key($res);
	return base64_encode($signature);
}

rsa私钥解密

/**
 * RSA私钥解密
 * @param $data 待解密内容
 */
function unsign($data) {
	$privatekeyFile = dirname(dirname(dirname(dirname(__DIR__)))) . '/conf/rsa_private_key2.pem';
	$decrypted = null;
	openssl_private_decrypt(base64_decode($data), $decrypted, file_get_contents($privatekeyFile));
	return $decrypted;
}

AES加密/解密

/**
 * $input待加密内容
 * $key密钥
 */
public function encrypt($input, $key) {
	$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
	$input = $this->pkcs5_pad($input, $size);
	$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
	$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
	mcrypt_generic_init($td, $key, $iv);
	$data = mcrypt_generic($td, $input);
	mcrypt_generic_deinit($td);
	mcrypt_module_close($td);
	$data = base64_encode($data);
	return $data;
}

/**
 * 填充方式
 */
private function pkcs5_pad($text, $blocksize) {
	$pad = $blocksize - (strlen($text) % $blocksize);
	return $text . str_repeat(chr($pad), $pad);
}

/**
 * $sStr待解密内容
 * $sKey密钥
 */
public function decrypt($sStr, $sKey) {
	$decrypted = mcrypt_decrypt(
		MCRYPT_RIJNDAEL_128, $sKey, base64_decode($sStr), MCRYPT_MODE_ECB
	);

	$dec_s = strlen($decrypted);
	$padding = ord($decrypted[$dec_s - 1]);
	$decrypted = substr($decrypted, 0, -$padding);
	return $decrypted;
}

AES加密中的常量MCRYPT_MODE_ECB为加密模式,可选的模式还有

MCRYPT_MODE_ECB

MCRYPT_MODE_CBC

MCRYPT_MODE_CFB

MCRYPT_MODE_NOFB

MCRYPT_MODE_OFB

MCRYPT_MODE_STREAM


之前的博文也记录了php的DES加密算法

http://blog.dongguagua.com/Index/detail/Id/19.html

前方10米有沙发可抢!
大人,请先右上角登个录 ↑
Copyright@2017-2020 www.dongguagua.com All Right Reserived 京ICP备17025269号