常用的数据加密规则算法(php包含MD5和RSA)

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;
}





转载于:https://www.cnblogs.com/shuniuniu/p/11326463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP提供了多种安全的加密方法,以下是常用的几种: 1. 哈希算法php常用的哈希算法MD5和SHA1。哈希算法将明文转换为固定长度的密文,不可逆。可以使用md5()和sha1()函数进行加密,但由于哈希算法已被破解,不建议直接使用。 2. 加盐哈希算法:为了增加哈希算法的安全性,可以使用加盐哈希算法。加盐是在密码明文前或后添加特定字符串,使哈希结果更不可预测。可以使用password_hash()函数生成盐值,并使用password_verify()函数进行验证。 3. 对称加密算法:对称加密算法使用相同的密钥进行加密和解密,常见的有AES和DES算法。使用mcrypt_encrypt()和mcrypt_decrypt()函数可以对数据进行对称加密和解密。 4. 非对称加密算法:非对称加密算法使用公钥和私钥进行加密和解密,常见的有RSA算法。使用openssl_public_encrypt()和openssl_private_decrypt()函数可以对数据进行非对称加密和解密。 5. SSL/TLS:SSL/TLS是一种安全协议,用于在客户端和服务器之间建立加密通信。可以使用OpenSSL扩展库进行SSL/TLS加密。 使用加密算法时,需要注意以下几点: 1. 使用足够的强度:选择合适的加密算法和密钥长度,以满足安全需求。 2. 加盐:对于哈希算法,使用随机的、唯一的盐值增加密码的安全性。 3. 密钥管理:保证密钥的安全性,防止泄露。 4. 防止密码重用:不要使用相同的密码或密钥进行加密不同的数据。 5. 保护敏感信息:加密只能保证数据在传输或存储过程中的安全性,不应将敏感信息明文存储在数据库中。 综上所述,选择适合的加密算法,并结合使用加盐、SSL/TLS等方法,可以增加PHP应用程序的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值