Heim php教程 php手册 PHP和.NET关于3DES加密兼容问题

PHP和.NET关于3DES加密兼容问题

Jun 06, 2016 pm 07:45 PM
.net 3des php unter um 兼容 加密 ICH 问题

下面是我的C#加解密代码: classDES { //密钥 privateconststringsKey="nuhyrn83Y9LNeygnpq7AMN0aeRQN7kuv"; //矢量,矢量可以为空 privateconststringsIV="qciO6X+aPLw="; ///summary ///加密 ////summary ///paramname="Value"明文/param ///returns密文ba

下面是我的C#加解密代码:

 class DES

      {

          //密钥

          private const string sKey = "nuhyrn83Y9LNeygnpq7AMN0aeRQN7kuv";

  

          //矢量,矢量可以为空

          private const string sIV = "qciO6X+aPLw=";

  

          /// 

          /// 加密

          /// 

          /// 明文

          /// 密文 base64转码

          public static string EncryptString(string Value)

          {

              SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();

              ICryptoTransform ct;

              MemoryStream ms;

              CryptoStream cs;

              byte[] byt;

              mCSP.Key = Convert.FromBase64String(sKey);

              mCSP.IV = Convert.FromBase64String(sIV);

              Console.WriteLine("Key:" + mCSP.Key.ToString() + ",IV:" + mCSP.IV.ToString());

              //指定加密的运算模式

              mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;

              //获取或设置加密算法的填充模式

              mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

              ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);

              byt = Encoding.UTF8.GetBytes(Value);

              ms = new MemoryStream();

              cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

              cs.Write(byt, 0, byt.Length);

              cs.FlushFinalBlock();

              cs.Close();

              return Convert.ToBase64String(ms.ToArray());

          }

  

          /// 

          /// 解密

          /// 

          /// base64转码密文

          /// 明文

          public static string DecryptString(string Value)

          {

              SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();

              ICryptoTransform ct;

              MemoryStream ms;

              CryptoStream cs;

              byte[] byt;

              mCSP.Key = Convert.FromBase64String(sKey);

              mCSP.IV = Convert.FromBase64String(sIV);

              mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;

              mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

              ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);

              byt = Convert.FromBase64String(Value);

              ms = new MemoryStream();

              cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

              cs.Write(byt, 0, byt.Length);

              cs.FlushFinalBlock();

              cs.Close();

  

              return Encoding.UTF8.GetString(ms.ToArray());

          }

      }

 下面是我的PHP加解密代码:

 class DesCrypt {

  /**

   * 使用3DES加密源数据

   * @param string $oriSource 源数据

   * @param string $key       密钥

   * @param string $defaultIV 加解密向量

   * @return string $result   密文

   */

  public function encryptByTDES($oriSource, $key, $defaultIV) {

  $key = base64_decode ( $key ); //结果为24位

  $iv = base64_decode ( $defaultIV ); //结果为8位

  $oriSource = $this->addPKCS7Padding ( $oriSource );

  $td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '' );

  mcrypt_generic_init ( $td, $key, $iv );

  $result = mcrypt_generic ( $td, $oriSource );

  mcrypt_generic_deinit ( $td );

  mcrypt_module_close ( $td );

  $result = base64_encode ( $result );

  return $result;

  }

  

  /**

   * 使用3DES解密密文

   * @param string $encryptedData 密文

   * @param string $key           密钥

   * @param string $defaultIV     加解密向量

   * @return string $result       解密后的原文

   */

  public function decryptByTDES($encryptedData, $key, $defaultIV) {

  $key = base64_decode ( $key ); //结果为24位

  $iv = base64_decode ( $defaultIV ); //结果为8位

  $encryptedData = base64_decode ( $encryptedData );

  $td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '' );

  mcrypt_generic_init ( $td, $key, $iv );

  $result = mdecrypt_generic ( $td, $encryptedData );

  mcrypt_generic_deinit ( $td );

  mcrypt_module_close ( $td );

  $result = $this->stripPKSC7Padding ( $result );

  return $result;

  }

  

  /**

   * 为字符串添加PKCS7 Padding

   * @param string $source    源字符串

   */

  private function addPKCS7Padding($source) {

  $block = mcrypt_get_block_size ( 'tripledes', 'cbc' );

  $pad = $block - (strlen ( $source ) % $block);

  if ($pad 

  $char = chr ( $pad );

  $source .= str_repeat ( $char, $pad );

  }

  return $source;

  }

  

  /**

   * 去除字符串末尾的PKCS7 Padding

   * @param string $source    带有padding字符的字符串

   */

  public function stripPKSC7Padding($source) {

  $block = mcrypt_get_block_size ( 'tripledes', 'cbc' );

  $char = substr ( $source, - 1, 1 );

  $num = ord ( $char );

  if ($num > 8) {

  return $source;

  }

  $len = strlen ( $source );

  for($i = $len - 1; $i >= $len - $num; $i --) {

  if (ord ( substr ( $source, $i, 1 ) ) != $num) {

  return $source;

  }

  }

  $source = substr ( $source, 0, - $num );

  return $source;

  }

  }

 这两部分代码的加密结果不同,无法兼容,请问是什么问题啊?

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

CakePHP erstellt Validatoren

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

CakePHP-Protokollierung

See all articles