加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

常用的数据加密规则算法(php)

发布时间:2020-12-13 22:16:19 所属栏目:PHP教程 来源:网络整理
导读:1.字典排序,并进行md5加密(字段1=字段值字段2=字段值再加上key) /** * @param $array 需要加密的数据 * @param $signKey 加密key * @return string 加密的MD5结果 */ function sign($array,$signKey){ ksort($array);//字典排序(升序排列) $str="";//将

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,true) .PHP_EOL.‘-----END PUBLIC KEY-----‘;

$pubkeyid = openssl_get_publickey($publickey); // 生成密钥资源id
if (openssl_public_decrypt($crypttext,$sourcestr,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,true). PHP_EOL."-----END RSA PRIVATE KEY-----";

$prikeyid = openssl_get_privatekey($privatekey);
if (openssl_private_decrypt($crypttext,$prikeyid,OPENSSL_PKCS1_PADDING))
{
return $sourcestr;
}
return FALSE;
}


/**
* 私匙加密
*/
function privatekey_encodeing($sourcestr,$privatekey)
{

//以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。
$privatekey=str_replace("-----BEGIN RSA PRIVATE KEY-----",true). PHP_EOL."-----END RSA PRIVATE KEY-----";
$prikeyid = openssl_get_privatekey($privatekey);
if (openssl_private_encrypt($sourcestr,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,$pubKey)  {    //转换为openssl格式密钥    $res = openssl_get_publickey($pubKey);    //调用openssl内置方法验签,返回bool值    $result = (bool)openssl_verify($data,base64_decode($sign),OPENSSL_ALGO_MD5);    //释放资源    openssl_free_key($res);    //返回资源是否成功    return $result;}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读