如何使用加密算法保护敏感数据

admin 2024-01-28 457 阅读 0评论

加密是使用算法将明文转换为密文的过程,以防止未经授权的访问。

加密分为两种类型

1、对称密钥加密

2、非对称加密(公钥加密)

加密算法的工作原理

加密算法是一种将明文转换为密文的数学函数,加密算法通常使用密钥来执行加密和解密操作。

1、加密过程

加密过程分为两个步骤:

明文输入:将明文输入到加密算法中。

密文输出:加密算法使用密钥对明文执行一系列复杂的数学运算,并将输出结果作为密文。

密文是加密算法输出的结果,它是用密钥加密后的明文,密文通常是无法直接读取的。

2、解密过程

解密过程与加密过程相反,它分为两个步骤:

密文输入:将密文输入到解密算法中。

明文输出:解密算法使用密钥对密文执行一系列复杂的数学运算,并将输出结果作为明文。

3、安全性

加密算法的安全性取决于密钥的强度,如果密钥足够强,则无法使用暴力破解等方法来破解密文。

4、应用

加密算法广泛应用于各种领域,包括网络安全、数据保护、身份认证等。

对称密钥加密

对称密钥加密是一种使用相同密钥进行加密和解密的数据加密方法。对称密钥加密通常用于大量数据的加密,因为它速度快且效率高。

对称密钥加密有两种主要类型:分组密码流密码

1、分组密码

分组密码使用密钥对固定大小的块(例如,64 或 128 位)中的数据进行加密。分组密码广泛用于各种应用,包括网络安全、数据库加密和文件加密。

常见的分组密码包括:

高级加密标准 (AES):AES 是最常用的分组密码,它支持 128、192 或 256 位的密钥长度。

三重 DES (3DES):3DES 是 DES 的三重迭代版本,它提供了更高的安全性。

国际数据加密算法 (IDEA):IDEA 是一种快速有效的密码,但它已被 AES 取代。

2、流密码

流密码通常在连续流中逐位或逐字节加密数据。流密码通常用于实时应用,例如网络传输和音频/视频加密。

常见的流密码包括:

Rivest 密码 (RC4):RC4 是最常用的流密码,它速度快且效率高。

无线局域网安全 (WEP):WEP 是一种用于无线局域网 (WLAN) 的流密码,但它已被 WPA 和 WPA2 取代。

安全套接字层 (SSL):SSL 是一种用于加密网络通信的协议,它使用流密码来保护数据。

示例:AES(高级加密标准)

function encrypt($data=""$key="") {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes-256-cbc")); // 动态 iv (我们也可以设置静态 iv)
    $encrypted = openssl_encrypt($data"aes-256-cbc"$key, 0, $iv);
    return base64_encode($iv . '!!' . $encrypted);
}
function decrypt( $data=""$key="") {
    list($iv$encryptedData) = explode('!!', base64_decode($data), 2);
    return openssl_decrypt($encryptedData"aes-256-cbc"$key, 0, $iv);
}

$plainData = [
    'email' => 'codewithrubab@gmail.com',
    'password' => 'codeOn@Vscode2024';
];
$saltKey = "asdckd44dbc228e16c2888436d17a";

$encryptedData = encrypt(json_encode($plainData), $saltKey);
echo $encryptedData;
$decryptedData = decrypt($encryptedData$saltKey);
print_r($decryptedData);

注意:如果我们需要在相同的纯文本上重新生成相同的加密数据,那么需要始终使用相同的 Salt Key 和 IV。否则,输出将会不同。

非对称加密(公钥加密):

它使用两种不同的密钥:用于加密的公钥和用于解密的私钥。

我们不用安全密钥交换来加密,因为它比对称加密慢,但对于数字签名和身份验证很有用,

常见的公钥加密技术:RSAECC(椭圆曲线加密)、Diffie-Hellman

下面是一个关于 RSA 算法的示例。

如果我们没有公钥和私钥,可以从命令行界面生成。

对于目录中的私钥文件生成:

openssl genrsa -out privateKey.pem 2048

对于公钥:

openssl rsa -in privateKey.pem -pubout

这里,privateKey.pemprivateKey.pem是生成的文件名。

生成的公钥是 RSA 结果。

私钥不是 RSA 结果,为了使其成为 RSA 结果,还需要编写一些代码。

首先,将此包安装到Laravel项目中。

Composer require "phpseclib/phpseclib""~2.0"
use phpseclib\Crypt\RSA;


// 私钥: pem 转换为 rsa 代码
$privateKey = '置pem文件数据';
$rsa = new RSA();
$rsa->loadKey($privateKey);
$rsaPrivateKey = $rsa->getPrivateKey();
dd($rsaPrivateKey);

此外,如果我们需要将公钥从 pem 转换为 RSA,那么我们可以使用此代码进行转换。

// 公钥: pem 转换为 rsa.
$publicKey = '设置pem文件数据';
$rsa = new RSA();
$rsa->loadKey($publicKey);
$rsa->setPublicKey($publicKey);
$rsaPublicKey = $rsa->getPublicKey();
dd($rsaPublicKey);

让我们看看非对称加密的现实实现:

商家与银行进行交易时,需要使用公钥加密和私钥解密来保护数据的安全。

银行向商家提供公钥,商家将公钥分享给银行。商家使用私钥加密交易请求数据,并将加密的数据发送给银行。银行使用商家提供的公钥解密数据。

银行处理数据后,使用私钥向商家发送加密响应。商家使用银行的公钥解密响应,以获得简单的回复。

此外,银行还要求商家在每个交易请求中发送签名。商家使用私钥和 PKCS1Padding 算法来解密已解码的敏感数据。签名使用 SHA256withRSA 签名算法生成。

现在将进行 api 调用以向银行端发起交易。

public  function signatureGenerate($data){
   $private_key = "-----您的RSA私钥-----";
   openssl_sign(json_encode($data), $signature$private_key, OPENSSL_ALGO_SHA256);
   return base64_encode($signature);
}   


public function encryptDataWithPublicKey($data){
   $public_key = "-----您的公钥-----";
   openssl_public_encrypt(json_encode($data), $encryptedData$public_key, OPENSSL_PKCS1_PADDING);
   return base64_encode($encryptedData);
}


public function decryptDataWithPrivateKey($cryptText){
   $private_key = "-----您的RSA 私钥-----";
   openssl_private_decrypt(base64_decode($cryptText), $plainText$private_key, OPENSSL_PKCS1_PADDING);
   return json_decode($plainTexttrue);
}


public function HttpPostMethod($postURL$postData$authToken = null)
{
   try {
       $curl = curl_init($postURL);
       $postData = json_encode($postData);
       $header = array(
           'Content-Type:application/json'
       );
      
       if($authToken){
           $header[] = 'token:' . $authToken;
       }


       curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
       curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
       curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);


       $resultdata = curl_exec($curl);


       $err = curl_error($curl);
       $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
       $curlErrorNo = curl_errno($curl);


       $ResultArray = json_decode($resultdatatrue);
       curl_close($curl);
       return $ResultArray;
   } catch (\Exception $exception) {
       echo '无法与银行连接,请稍后再试';
       exit;
   }


}


initTransaction($merchantId$merchantAccountNumber$orderId){
   $postUrl = 'api.your-bank.com/api/payment/initialize';
   $plainData = array(
       'merchant_id' => $merchantId,
       'order_id' => $orderId
   );
   $postData = array(
       'account_number' => $merchantAccountNumber,
       'sensitiveData' => $this->encryptDataWithPublicKey($sensitiveData),
       'signature' => $this->signatureGenerate($sensitiveData)
   );


   return $this->HttpPostMethod($postUrl$postData);
}
$encryptedResponse = $this->initTransaction('MER1234''ACC12345''ORD123456');
$plainResponse = $this->decryptDataWithPrivateKey($encryptedResponse['sensitiveData']);
dd($plainResponse);

选择加密算法时要考虑的事项:

1、需要的安全级别。

2、加密和解密的速度。

3、密钥管理复杂性。

4、资源限制。

使用加密算法的地方

1、安全通信(例如电子邮件、VPN)

2、数据存储(例如数据库、文件系统)

3、金融交易(例如网上银行)

4、密码保护

5、数字签名

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 457人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表