Heim  >  Artikel  >  Backend-Entwicklung  >  Detailliertes Codebeispiel für die PHP-PKI-Verschlüsselungstechnologie

Detailliertes Codebeispiel für die PHP-PKI-Verschlüsselungstechnologie

怪我咯
怪我咯Original
2017-07-12 09:53:032083Durchsuche

PKI ist die Abkürzung für „Public Key Infrastructure“, was übersetzt „Public Key Infrastructure“ bedeutet. PKI ist eine standardkonforme Public-Key-Verschlüsselungstechnologie, die eine sichereBasisplattform für die Entwicklung der E-Commerce-Technologie bietet und Spezifikationen. Im

X.509-Standard wird PKI zur Unterscheidung von der Privilege Management Infrastructure (PMI) als Unterstützung für die Verwaltung öffentlicher Schlüssel definiert und kann Authentifizierung, Verschlüsselung und Infrastruktur für Integrität und Verantwortlichkeit unterstützen Dienstleistungen]. Im Vergleich zum ersten Konzept beschreibt dieses Konzept nicht nur die Sicherheitsdienste, die PKI bereitstellen kann, sondern betont auch, dass PKI die Verwaltung öffentlicher Schlüssel unterstützen muss. Mit anderen Worten: Die bloße Verwendung der Public-Key-Technologie kann nicht als PKI bezeichnet werden, und es sollte auch eine Public-Key-Verwaltung bereitgestellt werden. Da PMI nur Public-Key-Technologie verwendet, aber keine öffentlichen Schlüssel verwaltet, kann PMI separat beschrieben werden, ohne mit Konzepten wie Public-Key-Zertifikaten verwechselt zu werden. Die konzeptionelle Unterscheidung von PKI und PMI in X.509 ist für die Beschreibung des Standards von Vorteil. Da PMI jedoch die Public-Key-Technologie nutzt, muss die Nutzung und Etablierung von PMI zunächst durch die PKI-Schlüsselverwaltung unterstützt werden. Mit anderen Worten: PMI muss sich an PKI binden. Wenn wir die beiden zu einem kombinieren, fällt PMI+PKI vollständig in den durch den X.509-Standard definierten PKI-Bereich. Gemäß der Definition von X.509 kann PMI+PKI weiterhin als PKI bezeichnet werden, und PMI kann als Teil von PKI betrachtet werden.

Dieser Artikel ist eine detaillierte Analyse und Einführung in die PKI-Verschlüsselungstechnologie (openssl) in PHP. Freunde in Not können sich auf den

-Code wie folgt beziehen:

<?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);

Private und öffentliche Schlüssel generieren
genrsa -out private-rsa.pem
rsa -in private-rsa.pem -pubout -out public-rsa.cer

Das obige ist der detaillierte Inhalt vonDetailliertes Codebeispiel für die PHP-PKI-Verschlüsselungstechnologie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn