Un article expliquant en détail comment implémenter le chiffrement AES-128-CBC-PKCS5Padding en PHP

藏色散人
Libérer: 2023-04-10 16:22:02
avant
5375 Les gens l'ont consulté

La demande de l'autre partie est de

encoder les données commerciales de l'interface et de soumettre la chaîne résultante, ainsi que de fournir la clé (clé) et le vecteur d'initialisation (offset) correspondant à la méthode de cryptage.

AES-128-CBC-PKCS5Padding 加密,然后再做 Base64Après avoir vu cette méthode de cryptage pour la première fois, j'ai cherché dans la bibliothèque de fonctions PHP pour voir s'il existait une fonction de cryptage correspondante. Cependant, après avoir cherché, j'ai découvert qu'il n'y en avait pas et j'ai dû l'implémenter moi-même. que je pourrais utiliser la fonction mcrypt. Implémentation de l'extension, mais la fonction mcrypt a été abandonnée depuis PHP 7.1.0. Il est fortement recommandé de ne pas utiliser cette fonction. Je dois rechercher d'autres bibliothèques de fonctions de chiffrement sur. au bas du manuel. J'ai découvert que cela peut être fait en comprenant la fonction openssl_encrypt (données cryptées). Pour mettre en œuvre les exigences, veuillez lire le manuel pour l'utilisation spécifique de openssl_encrypt [Recommandé :

Tutoriel vidéo PHP

].

La fonction de mise en œuvre est la suivante :

  function encrypt($input, $key, $iv){
      return base64_encode(openssl_encrypt($input, 'AES-128-CBC', $key, OPENSSL_RAW_DATA,$iv));
  }

  // 解密
  function decrypt($input, $key, $iv){
      return openssl_decrypt(base64_decode($input), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
  }

  // 测试加密 (我这里用的是json字符串)
  $dataJson = '[{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]';
  print_r(encrypt($dataJson, $key, $iv));
  //u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D

  // 测试解密
  $strr = 'u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D';
  print_r(decrypt($strr, $key, $iv));
  // [{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]
Copier après la connexion
J'ai réussi l'auto-test, je me suis assis et j'ai attendu le débogage commun avec un visage fier. Ensuite, j'ai commencé à écrire sur d'autres affaires. Après quelques jours, un débogage conjoint a révélé que l'autre partie ne pouvait pas déchiffrer ce que j'avais chiffré, et je ne pouvais pas déchiffrer ce que l'autre partie avait chiffré. L'algorithme de cryptage ne correspondait pas (je me suis gratté la tête). Après avoir recherché des problèmes connexes sur Google, j'ai trouvé une phrase : La signification générale est que dans la bibliothèque de chiffrement mcrypt abandonnée, 128 fait en fait référence à la taille du bloc plutôt qu'à la taille de la clé, mais dans aes-128-cbc dans openssl, 128 fait référence. à la taille de la clé, c'est-à-dire que lorsque vous utilisez des clés valides de 256 bits, elles sont toutes aes-256, et si vous souhaitez convertir mcrypt en méthode de cryptage d'openssl, le 128 de mcrypt doit être écrit comme le 256 d'openssl, j'ai donc changé avec l'attitude de l'essayer. aes-128-cbc est aes-256-cbc, puis débogué, et a finalement constaté que le débogage commun avait réussi. Cependant, les détails techniques spécifiques ne sont pas encore clairs. et étudiez-le plus tard quand nous aurons le temps

> **解决的方案,是把加密方式 AES-128-CBC 替换成 AES-256-CBC**
Copier après la connexion

                                                            .

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!

Étiquettes associées:
php
source:learnku.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!