欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP和C#可共用的可逆加密算法詳解

 更新時(shí)間:2015年10月26日 14:36:21   投稿:lijiao  
這篇文章主要介紹了PHP和C#可共用的可逆加密算法,需要的朋友可以參考下

在一些項(xiàng)目中要求在php中生成加密,然后在asp.net中接受過來的密碼再解密,下面和大家分享一個(gè)PHP與asp.net C#可共用的可逆加密算法,感興趣的可以參考參考。

php加密算法:

<?php
class DES
{
  var $key;
  var $iv; //偏移量
  
  function DES($key = '11001100', $iv=0 ) {
  //key長度8例如:1234abcd
    $this->key = $key;
    if( $iv == 0 ) {
      $this->iv = $key; //默認(rèn)以$key 作為 iv
    } else {
      $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
    }
  }
  
  function encrypt($str) {
  //加密,返回大寫十六進(jìn)制字符串
    $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
    $str = $this->pkcs5Pad ( $str, $size );
    return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );
  }
  
  function decrypt($str) {
  //解密
    $strBin = $this->hex2bin( strtolower( $str ) );
    $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );
    $str = $this->pkcs5Unpad( $str );
    return $str;
  }
  
  function hex2bin($hexData) {
    $binData = "";
    for($i = 0; $i < strlen ( $hexData ); $i += 2) {
      $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );
    }
    return $binData;
  }

  function pkcs5Pad($text, $blocksize) {
    $pad = $blocksize - (strlen ( $text ) % $blocksize);
    return $text . str_repeat ( chr ( $pad ), $pad );
  }
  
  function pkcs5Unpad($text) {
    $pad = ord ( $text {strlen ( $text ) - 1} );
    if ($pad > strlen ( $text ))
      return false;
    if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
      return false;
    return substr ( $text, 0, - 1 * $pad );
  }
  
}
?>

asp.net程序代碼:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace WindowsFormsApplication1
{
  /// <summary>
  /// DES加密解密字符串
  /// </summary>
  public class DesEncryption
  {
    /// <summary>
    /// DES加密字符串
    /// </summary>
    /// <param name="encryptString">待加密的字符串</param>
    /// <param name="encryptKey">加密密鑰,要求為8位</param>
    /// <returns>加密成功返回加密后的字符串,失敗返回null</returns>
    public static string EncryptDES(string encryptString, string encryptKey = "11001100")
    {
      try
      {
        byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(encryptKey.Substring(0, 8));
        byte[] rgbIV = rgbKey;
        byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
        DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
        MemoryStream mStream = new MemoryStream();
        CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
        cStream.Write(inputByteArray, 0, inputByteArray.Length);
        cStream.FlushFinalBlock();
        StringBuilder ret = new StringBuilder();
        foreach (byte b in mStream.ToArray())
        {
          ret.AppendFormat("{0:X2}", b);
        }
        ret.ToString();
        return ret.ToString(); 
      }
      catch
      {
        return null;
      }
    }

    /// <summary>
    /// DES解密字符串
    /// </summary>
    /// <param name="decryptString">待解密的字符串</param>
    /// <param name="decryptKey">解密密鑰,要求為8位,和加密密鑰相同</param>
    /// <returns>解密成功返回解密后的字符串,失敗返回null</returns>
    public static string DecryptDES(string decryptString, string decryptKey = "11001100")
    {
      try
      {
        byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(decryptKey);
        byte[] rgbIV = rgbKey;
        byte[] inputByteArray = new byte[decryptString.Length / 2];
        for (int x = 0; x < decryptString.Length / 2; x++)
        {
          int i = (Convert.ToInt32(decryptString.Substring(x * 2, 2), 16));
          inputByteArray[x] = (byte)i;
        }      
        DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
        MemoryStream mStream = new MemoryStream();
        CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
        cStream.Write(inputByteArray, 0, inputByteArray.Length);
        cStream.FlushFinalBlock();
        return Encoding.UTF8.GetString(mStream.ToArray());
      }
      catch
      {
        return null;
      }
    }
  }
}

以上就是PHP和C#可共用的可逆加密算法,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 淺談PHP正則表達(dá)式中修飾符/i, /is, /s, /isU

    淺談PHP正則表達(dá)式中修飾符/i, /is, /s, /isU

    我們?cè)赑HP正則表達(dá)式的學(xué)習(xí)中會(huì)碰到修飾符,那么關(guān)于PHP正則表達(dá)式修飾符的理解以及使用我們需要注意什么呢?那么我們來具體的看看它的概念以及相關(guān)內(nèi)容。
    2014-10-10
  • PHP版本如何選擇?應(yīng)該使用哪個(gè)版本?

    PHP版本如何選擇?應(yīng)該使用哪個(gè)版本?

    這篇文章主要介紹了PHP版本如何選擇?應(yīng)該使用哪個(gè)版本?,本文比較總結(jié)了應(yīng)該使用PHP的哪個(gè)版本,需要的朋友可以參考下
    2015-05-05
  • 解析php中兩種縮放圖片的函數(shù),為圖片添加水印

    解析php中兩種縮放圖片的函數(shù),為圖片添加水印

    本篇文章是對(duì)php中兩種縮放圖片的函數(shù),為圖片添加水印的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php采集時(shí)被封ip的解決方法

    php采集時(shí)被封ip的解決方法

    最近各種網(wǎng)站的采集程序?qū)懙谋容^多,遇到在采某網(wǎng)站時(shí)采到100多條時(shí)突然發(fā)現(xiàn)對(duì)方的網(wǎng)站打不開了,猜到肯定被封ip了,用了代理還是會(huì)封,這不是辦法。
    2010-08-08
  • PHP strncasecmp字符串比較的小技巧

    PHP strncasecmp字符串比較的小技巧

    好象,大多時(shí)候,我們對(duì)于字符串的比較都是采用了 strtolower或者strtoupper之后,再判斷是否相等。
    2011-01-01
  • 淺談PHP性能優(yōu)化之php.ini配置

    淺談PHP性能優(yōu)化之php.ini配置

    用于生產(chǎn)環(huán)境中的PHP需要對(duì)其進(jìn)行優(yōu)化,讓PHP自身發(fā)揮更好的性能,除了寫好PHP代碼,還要配置好php.ini。本文從內(nèi)存、文件上傳、會(huì)話緩沖輸出、真實(shí)路徑緩存這幾個(gè)方面講解php.ini的配置調(diào)優(yōu)。
    2021-05-05
  • PHP中數(shù)組處理函數(shù)的使用方法詳解

    PHP中數(shù)組處理函數(shù)的使用方法詳解

    這篇文章主要為大家介紹了一些PHP中的數(shù)組處理函數(shù),文中結(jié)合實(shí)例詳解了PHP數(shù)組處理函數(shù)的功能與使用技巧,需要的朋友可以參考一下
    2022-04-04
  • php中magic_quotes_gpc對(duì)unserialize的影響分析

    php中magic_quotes_gpc對(duì)unserialize的影響分析

    這篇文章主要介紹了php中magic_quotes_gpc對(duì)unserialize的影響,以實(shí)例的形式分析了magic_quotes_gpc安全過濾對(duì)unserialize造成的影響以及對(duì)此的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • php 數(shù)組隨機(jī)取值的簡單實(shí)例

    php 數(shù)組隨機(jī)取值的簡單實(shí)例

    下面小編就為大家?guī)硪黄猵hp 數(shù)組隨機(jī)取值的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05

最新評(píng)論