php哪些加密算法需要密钥,常用的数据加密规则算法(php)

1.字典排序,并进行md5加密(字段1=字段值&字段2=字段值再加上key)

/**

* @param $array 需要加密的数据

* @param $signKey 加密key

* @return string 加密的MD5结果

*/

function sign($array,$signKey){

ksort($array);//字典排序(升序排列)

$str="";//将结果组合成key1=value&key2=value&signkey格式

foreach ($array as $k=>$v) {

$str.=$k.‘=‘.$v.‘&‘;

}

$str = $str.$signKey;//加上signKey(如果需求是要求去掉&再加加密key的,可以使用php的函数substr去掉最后的一个&符号) return md5($str);}

2.rsa公钥加密和解密、私钥解密私钥加密,签名和验证

/**

* 公匙加密

* @param unknown_type $sourcestr 加密字符串

* @param unknown_type $publickey 公钥

*/

function publickey_encodeing($sourcestr, $publickey)

{

//以下为了初始化公钥,保证在您填写公钥时不管是带格式还是不带格式都可以通过验证。

$publickey = str_replace("-----BEGIN PUBLIC KEY-----","",$publickey);

$publickey = str_replace("-----END PUBLIC KEY-----","",$publickey);

$publickey = str_replace("\n","",$publickey);

$publickey = ‘-----BEGIN PUBLIC KEY-----‘.PHP_EOL.wordwrap($publickey, 64, "\n", true) .PHP_EOL.‘-----END PUBLIC KEY-----‘;

$pubkeyid = openssl_get_publickey($publickey); // 生成密钥资源id

if (openssl_public_encrypt($sourcestr, $crypttext, $pubkeyid, OPENSSL_PKCS1_PADDING)) //OPENSSL_PKCS1_PADDING采用RSA_PKCS1_PADDING填充模式

{

return $crypttext;

}

return FALSE;

}

/**

* 公匙解密

*/

function publickey_decodeing($crypttext, $publickey)

{

//以下为了初始化公钥,保证在您填写公钥时不管是带格式还是不带格式都可以通过验证。

$publickey = str_replace("-----BEGIN PUBLIC KEY-----","",$publickey);

$publickey = str_replace("-----END PUBLIC KEY-----","",$publickey);

$publickey = str_replace("\n","",$publickey);

$publickey = ‘-----BEGIN PUBLIC KEY-----‘.PHP_EOL.wordwrap($publickey, 64, "\n", true) .PHP_EOL.‘-----END PUBLIC KEY-----‘;

$pubkeyid = openssl_get_publickey($publickey); // 生成密钥资源id

if (openssl_public_decrypt($crypttext, $sourcestr, $pubkeyid, OPENSSL_PKCS1_PADDING)) //OPENSSL_PKCS1_PADDING采用RSA_PKCS1_PADDING填充模式

{

return $sourcestr;

}

return FALSE;

}

/**

* 私匙解密

*/

function privatekey_decodeing($crypttext, $privatekey)

{

//以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。

$privatekey=str_replace("-----BEGIN RSA PRIVATE KEY-----","",$privatekey);

$privatekey=str_replace("-----END RSA PRIVATE KEY-----","",$privatekey);

$privatekey=str_replace("\n","",$privatekey);

$privatekey="-----BEGIN RSA PRIVATE KEY-----".PHP_EOL .wordwrap($privatekey, 64, "\n", true). PHP_EOL."-----END RSA PRIVATE KEY-----";

$prikeyid = openssl_get_privatekey($privatekey);

if (openssl_private_decrypt($crypttext, $sourcestr, $prikeyid, OPENSSL_PKCS1_PADDING))

{

return $sourcestr;

}

return FALSE;

}

/**

* 私匙加密

*/

function privatekey_encodeing($sourcestr, $privatekey)

{

//以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。

$privatekey=str_replace("-----BEGIN RSA PRIVATE KEY-----","",$privatekey);

$privatekey=str_replace("-----END RSA PRIVATE KEY-----","",$privatekey);

$privatekey=str_replace("\n","",$privatekey);

$privatekey="-----BEGIN RSA PRIVATE KEY-----".PHP_EOL .wordwrap($privatekey, 64, "\n", true). PHP_EOL."-----END RSA PRIVATE KEY-----";

$prikeyid = openssl_get_privatekey($privatekey);

if (openssl_private_encrypt($sourcestr, $crypttext, $prikeyid, OPENSSL_PKCS1_PADDING))

{

return $crypttext;

}

return FALSE;

}

/**RSA签名 * $data待签名数据 * $priKey商户私钥 * 签名用商户私钥 * 使用MD5摘要算法 * 最后的签名,需要用base64编码 * return Sign签名 */function Rsasign($data, $priKey) { //转换为openssl密钥 $res = openssl_get_privatekey($priKey); //调用openssl内置签名方法,生成签名$sign openssl_sign($data, $sign, $res, OPENSSL_ALGO_MD5); //释放资源 openssl_free_key($res); //base64编码 $sign = base64_encode($sign); return $sign;}/**RSA验签 * $data待签名数据 * $sign需要验签的签名 * $pubKey公钥 * return 验签是否通过 bool值 */function Rsaverify($data, $sign, $pubKey) { //转换为openssl格式密钥 $res = openssl_get_publickey($pubKey); //调用openssl内置方法验签,返回bool值 $result = (bool)openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_MD5); //释放资源 openssl_free_key($res); //返回资源是否成功 return $result;}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值