Maison php教程 PHP开发 Explication détaillée du cryptage, du décryptage, de la signature et de la vérification de la signature php rsa

Explication détaillée du cryptage, du décryptage, de la signature et de la vérification de la signature php rsa

Dec 30, 2016 am 09:21 AM

Chiffrement, décryptage, signature, vérification de signature php rsa

Étant donné que l'organisation tierce utilise la version Java de la méthode de cryptage et de décryptage rsa, je viens de commencer à trouver de nombreuses versions PHP de cryptage et de décryptage rsa sur Internet. Mais la plupart d’entre eux ne sont pas adaptés à l’amarrage avec Java.

La version php suivante convient à l'amarrage avec l'interface Java. La clé Java applicable doit être ajoutée lors de l'utilisation du langage php

-----BEGIN CERTIFICATE-----
  
-----END CERTIFICATE-----
Copier après la connexion


<🎜. >Utilisez la clé :

Clé publique de chiffrement public_key.cer

Clé privée de décryptage private_key.key

Clé privée de signature sign_key.key

Clé publique de vérification verify.cer

<?php
class RSAUtils{
  //加密公钥
  function redPukey()
  {   
    //拼接加密公钥路径
    $encryptionKeyPath="D:/encryptions.cer";  
    $encryptionKey4Server = file_get_contents($encryptionKeyPath);
 
    $pem = chunk_split(base64_encode($encryptionKey4Server),64,"\n");//转换为pem格式的公钥
    $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
    $publicKey = openssl_pkey_get_public($pem);
    return $publicKey;
  }
   
  //解密私钥
  function redPikey()
  {   
    //拼接解密私钥路径
    $decryptKeyPath="D:/decrypts.key";  
    $decryptKey4Server = file_get_contents($decryptKeyPath);
 
    $pem = chunk_split($decryptKey4Server,64,"\n");//转换为pem格式的私钥
    $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
    $privateKey = openssl_pkey_get_private($pem);
    return $privateKey;
  }
   
  //签名私钥
  function redSignkey()
  {   
    //拼接签名路径
    $signKeyPath="D:/DEMO/sign.key";
    $signKey4Server = file_get_contents($signKeyPath);
 
    $pem = chunk_split($signKey4Server,64,"\n");//转换为pem格式的私钥
    $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
    $signKey = openssl_pkey_get_private($pem);
    return $signKey;
  }
   
  //验签公钥
  function redVerifykey()
  {   
    //拼接验签路径
    $verifyKeyPath="D:/DEMO/verify.cer"; 
    $verifyKey4Server = file_get_contents($verifyKeyPath);
 
    $pem = chunk_split(base64_encode($verifyKey4Server),64,"\n");//转换为pem格式的公钥
    $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
    $verifyKey = openssl_pkey_get_public($pem);
    return $verifyKey;
  }
   
  //公钥加密
  function pubkeyEncrypt($source_data, $pu_key) {
    $data = "";
    $dataArray = str_split($source_data, 117);
    foreach ($dataArray as $value) {
      $encryptedTemp = "";
      openssl_public_encrypt($value,$encryptedTemp,$pu_key);//公钥加密
      $data .= base64_encode($encryptedTemp);
    }
    return $data;
  }
   
  //私钥解密
  function pikeyDecrypt($eccryptData,$decryptKey) {
    $decrypted = "";
    $decodeStr = base64_decode($eccryptData);
    $enArray = str_split($decodeStr, 256);
 
    foreach ($enArray as $va) {
      openssl_private_decrypt($va,$decryptedTemp,$decryptKey);//私钥解密
      $decrypted .= $decryptedTemp;
    }
    return $decrypted;
  }
   
  
}
?>
Copier après la connexion


Remarque :

est parfois crypté avec base64_encode et transmis à d'autres pages sous forme de GET une fois déchiffré. avec base64_decode, un message d'erreur apparaît.

Lorsque j'ai rencontré ce problème, je me demandais pourquoi certains pouvaient être décryptés correctement, mais certains étaient tronqués

Après avoir vérifié plus tard, j'ai trouvé ? qu'il y avait des caractères chinois, une fois passé sous la forme GET, le nombre sera remplacé par des espaces

Afin d'éviter les caractères tronqués, j'ai fait une étape de substitution puis je l'ai déchiffré. de caractères tronqués n'existe plus !

Par exemple, si vous transmettez une variable oid sous la forme de GET, alors lors du décryptage et de la restauration, remplacez d'abord les espaces par des nombres. Ensuite, la sortie sera normale. >

Comme suit : $oid=base64_decode(str_replace (" "," ",$_GET[oid]));


Merci d'avoir lu, j'espère que cela pourra aider tout le monde, merci vous pour votre soutien à ce site !

Pour plus d'articles sur le chiffrement, le décryptage, la signature et la vérification de signature php rsa, veuillez faire attention au site Web PHP chinois !

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)