Maison  >  Article  >  développement back-end  >  PHP utilise OpenSSL pour générer des certificats et chiffrer et déchiffrer des exemples de code

PHP utilise OpenSSL pour générer des certificats et chiffrer et déchiffrer des exemples de code

怪我咯
怪我咯original
2017-07-12 09:56:342191parcourir

OpenSSL est une bibliothèque cryptographique Secure Sockets Layer qui comprend les principaux algorithmes cryptographiques, les fonctions de gestion d'encapsulation de clés et de certificats couramment utilisées, ainsi que les protocoles SSL, et fournit une multitude d'applications pour les tests ou à d'autres utilisations.

Après qu'OpenSSL ait été exposé à de graves failles de sécurité, il a été découvert que la plupart des sites Web cryptés via le protocole SSL utilisent un progiciel open source appelé OpenSSL. La vulnérabilité OpenSSL n'affecte pas seulement les sites Web commençant par https, les pirates peuvent également utiliser cette vulnérabilité pour lancer directement des attaques « Heartbleed » sur les ordinateurs personnels. Selon l'analyse, un grand nombre de logiciels sous Windows utilisent la bibliothèque de codes vulnérable OpenSSL et peuvent être attaqués par des pirates informatiques pour capturer les données de la mémoire de l'ordinateur de l'utilisateur.

Cet article présente principalement l'utilisation d'OpenSSL pour générer des certificats ainsi que le cryptage et le décryptage en PHP. Les amis dans le besoin peuvent s'y référer

Dépend de l'extension OpenSSL

/*加密解密*/
function authcode($string, $operation = 'E') {
  $ssl_public = file_get_contents(DATA_PATH."/conf/cert_public.key");
  $ssl_private = file_get_contents(DATA_PATH."/conf/cert_private.pem");
  $pi_key = openssl_pkey_get_private($ssl_private);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
  $pu_key = openssl_pkey_get_public($ssl_public);//这个函数可用来判断公钥是否是可用的
  if(false == ($pi_key || $pu_key)) return '证书错误';
  $data = "";
  if($operation=='D'){
    openssl_private_decrypt(base64_decode($string),$data,$pi_key);//私钥解密
  }else{
    openssl_public_encrypt($string,$data,$pu_key);//公钥加密
    $data = base64_encode($data);
  }
  return $data;
}
/*生成证书*/
function exportOpenSSLFile(){
  $config = array(
    "digest_alg"    => "sha512",
    "private_key_bits" => 4096,           //字节数  512 1024 2048  4096 等
    "private_key_type" => OPENSSL_KEYTYPE_RSA,   //加密类型
  );
  $res = openssl_pkey_new($config);
  if($res == false) return false;
  openssl_pkey_export($res, $private_key);
  $public_key = openssl_pkey_get_details($res);
  $public_key = $public_key["key"];
  file_put_contents(DATA_PATH."/conf/cert_public.key",$public_key);
  file_put_contents(DATA_PATH."/conf/cert_private.pem",$private_key);
  openssl_free_key($res);
}
.

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