Home >Backend Development >PHP Tutorial >Reversible encryption algorithm that can be shared between PHP and asp.net C#_PHP tutorial

Reversible encryption algorithm that can be shared between PHP and asp.net C#_PHP tutorial

WBOY
WBOYOriginal
2016-07-20 11:12:10784browse

Because of the work requirements, we need to generate encryption in PHP and then decrypt the password received in asp.net. Below I found a reversible encryption algorithm that can be shared between PHP and asp.net C#. Students who need to know more can refer to it.

php encryption algorithm

The code is as follows Copy code
 代码如下 复制代码

class DES
{
var $key;
var $iv; //偏移量

function DES($key = '11001100', $iv=0 ) {
//key长度8例如:1234abcd
$this->key = $key;
        if( $iv == 0 ) {
            $this->iv = $key; //默认以$key 作为 iv
        } else {
            $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
        }
    }
   
    function encrypt($str) {
    //加密,返回大写十六进制字符串
        $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 );
    }
   
}
?>

class DES
{
var $key;
var $iv; // partial Shift amount

function DES($key = '11001100', $iv=0) {
//key length 8, for example: 1234abcd
$this->key = $ key;
                                                                                                                                                                                                                                                                                                ->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
                                                                                                                                                   . > //Encryption, returns uppercase hexadecimal string
         $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) ) ); str) {
                                                                                                                                                                                                             strBin, MCRYPT_DECRYPT, $this->iv );
            $str = $this->pkcs5Unpad($str); > function hex2bin($hexData) {
$binData = "";
for($i = 0; $i < strlen ( $hexData ); $i += 2) {
$binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );
                                                              , $blocksize) {
$pad = $blocksize - (strlen ( $text ) % $blocksize);
return $text . str_repeat ( chr ( $pad ), $pad );
}
                                                                                                                                                                                                                                                                                                    . $ Text)
Return false;
If (STRSPN ($ Text, Chr ($ Pad), Strlen ($ Text) -$ Pad)! = $ Pad)
RETURN FALSE; < br />          return substr ($text, 0, - 1 * $pad);
                                                                                                                                                                                                                                                           

asp.net program code

TechArticle
The code is as follows Copy code

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

namespace WindowsFormsApplication1
{
///


/// DES encryption and decryption string
///

public class DesEncryption
{
///
/// DES encrypted string
///

/// Wait Encrypted string & lt;/Param & GT;
/// & lt; Param name = "enCryptkey" & gt; encrypted key, requires 8 -bit & lt;/Param & gt;
/// & lt; Returns the encrypted string, returns null on failure                        byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(encryptKey.Substring(0, 8));
          byte[] rgbIV = rgbKey;                                                                            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())
                                                                                                                                  .Appndformat ("{0: x2}", b);
}
Ret.tostring ();
Return Ret.tostring (); 🎜>           return null;
                                                                                                                                                                                         ;

///


String
                                                                                                                                                                                                                                                                                        . returns>Decryption returns the decrypted string if successful, returns null if failed
public static string DecryptDES(string decryptString, string decryptKey = "11001100")
{
{
byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(decryptKey);
byte[] rgbIV = rgbKey;
byte[] inputByteArray = new byte[decryptString.Length / 2];
for (int x = 0; x < decryptString.Length / 2;             inputByteArray[x | 🎜> 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());
                                                                                                                                                         }
}











http://www.bkjia.com/PHPjc/444596.html

www.bkjia.com

true

http: //www.bkjia.com/PHPjc/444596.html
Because of work requirements, we need to generate encryption in php and then decrypt the password received in asp.net, as follows I found a reversible encryption algorithm that can be used between PHP and asp.net C#. I need to know more about it...

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn