Maison  >  Article  >  développement back-end  >  Exemple de code détaillé de la technologie de cryptage PHP pki

Exemple de code détaillé de la technologie de cryptage PHP pki

怪我咯
怪我咯original
2017-07-12 09:53:032083parcourir

PKI est l'abréviation de Public Key Infrastructure, qui se traduit par infrastructure à clé publique ; PKI est une technologie de cryptage à clé publique conforme aux normes qui fournit une plate-forme de base sécurisée pour le développement de la technologie du commerce électronique. et spécifications. Dans la norme

X.509, afin de la distinguer de l'Infrastructure de gestion des privilèges (PMI), la PKI est définie comme prenant en charge la gestion des clés publiques et peut prendre en charge l'authentification, le cryptage, l'infrastructure pour l'intégrité et la responsabilité. services]. Par rapport au premier concept, ce concept décrit non seulement les services de sécurité que la PKI peut fournir, mais souligne également que la PKI doit prendre en charge la gestion des clés publiques. En d'autres termes, la simple utilisation de la technologie à clé publique ne peut pas être appelée PKI, et la gestion des clés publiques doit également être assurée. Étant donné que PMI utilise uniquement la technologie des clés publiques mais ne gère pas les clés publiques, PMI peut être décrit séparément sans être confondu avec des concepts tels que les certificats de clés publiques. Sur le plan conceptuel, la distinction entre PKI et PMI dans X.509 est bénéfique pour la description de la norme. Cependant, étant donné que PMI utilise une technologie à clé publique, l'utilisation et l'établissement de PMI doivent d'abord être pris en charge par la gestion des clés PKI. En d’autres termes, PMI doit se lier à PKI. Lorsque nous combinons les deux en un seul, PMI+PKI entre entièrement dans le cadre de la PKI définie par la norme X.509. Selon la définition de X.509, PMI+PKI peuvent toujours être appelés PKI, et PMI peut être considéré comme faisant partie de PKI.

Cet article est une analyse détaillée et une introduction à la technologie de cryptage pki (openssl) en php. Les amis dans le besoin peuvent se référer au code

comme suit :

<?php
//pki加密
//使用pki加密需要开启 openssl扩展
//php.ini extension = php_openssl.dll扩展
/*pki模式是
 * 公钥加密,私钥解密;
 * 私钥加密,公钥解密;
 */
//私钥加密,公钥解密
//客户端
//$data数据
$data = &#39;abcd&#39;;
//获取私钥 $priv_key_id
$priv_key_id = openssl_get_privatekey(file_get_contents(&#39;99bill-rsa.pem&#39;, r));
//获取公钥  $pub_key_id
$pub_key_id = openssl_get_publickey(file_get_contents(&#39;99bill-rsa.cer&#39;, r));
//$data首选通过SHA1哈希加密,然后通过$priv_key_id私钥加密,生成签名$signature
//$signature就是加密过的签名
//openssl_sign()加密函数,至于它的解密方法我不知道??????????????????????
openssl_sign($data, $signature, $priv_key_id, OPENSSL_ALGO_SHA1);
//还有两种加密函数,而且这两种加密函数有解密方法,知道
//第一种:私钥加密,公钥解密
//$data要加密的数据,$crypted是加密生成的数据,$decrypted是解密生成的数据;  $data与$decrypted值相同
//通过$priv_key_id私钥加密,生成$crypted;
openssl_private_encrypt($data, $crypted, $priv_key_id);
echo $crypted;
//通过$pub_key_id公钥解密,生成$decrypted
openssl_public_decrypt($crypted, $decrypted , $pub_key_id);
//第二种:公钥加密,私钥解密
//$data要加密的数据,$crypted是加密生成的数据,$decrypted是解密生成的数据;  $data与$decrypted值相同
//通过$pub_key_id公钥加密,生成$crypted;
openssl_public_encrypt($data, $crypted, $pub_key_id);
//通过$priv_key_id私钥解密,生成$decrypted
openssl_private_decrypt($crypted, $decrypted, $priv_key_id);
//注意事项,我这边的获取公钥与私钥的文件是不对应的
//正常情况,获取公钥与私钥文件是一一对应的,这里我使用快钱的。
//快钱给了私钥生成文件,对应的公钥生成文件在快钱那边
//快钱给了公钥生成文件,对应的私钥生成文件在快钱那边
//也就是缺少了一个公钥生成文件和一个私钥生成文件
//我始终没找到一个一一对应的私钥、公钥生成文件,如果你找的了发我一份,谢谢。
// openssl_verify()方法验证签名是否正确(私钥加密生成的数据返回来,用对应的公钥验证),只有这一种情况。
// $signature公钥加密生成的数据,$data原始数据,成功返回1,失败返回0,错误返回-1
// $pub_key_id公钥
openssl_verify($data, $signature, $pub_key_id);
//从内存中释放私钥或公钥
openssl_free_key($priv_key_id);
openssl_free_key($pub_key_id);

Générer des clés privées et publiques
genrsa -out private-rsa.pem
rsa -in private-rsa.pem -pubout -out public-rsa.cer

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn