首页 > 编程知识 正文

php中des加密解密简单实现,des加密解密例子

时间:2023-12-27 22:27:19 阅读:325869 作者:FFYS

本文目录一览:

用PHP的方法解DES加密

?php

$key ='LY870513';

$ctext = 'j45Rrzxm0jD62U1w798yBg==';

$ptext = mcrypt_decrypt ( MCRYPT_DES, $key , base64_decode($ctext), MCRYPT_MODE_CBC, "x12x34x56120x90xabxcdxef");

//echo iconv('UTF-8','GBK',$ptext); //GBK环境使用,UTF8环境多余不用

echo $ptext; //UTF8环境用

20219241337

由于不清楚原代码的块链接模式,暂时用的CBC,对于短数据可解出。

PHP常用加密解密方法

作者/上善若水

1.md5(string $str,bool $flag = false);

$flag = false 默认返回32位的16进至数据散列值

$flag = true  返回原始流数据

2.sha1($string,$flag = false)

$flag = false 默认返回40位的16进至数据散列值

true  返回原始流数据

3.hash(string $algo,srting $str,bool $flag);

$algo : 算法名称,可通过hash_algos()函数获取所有hash加密的算法

如:md5,sha1等,采用md5,sha1加密所得结果和1,2两种方式结 果相同。

$flag = false 默认返回16进至的数据散列值,具体长度根据算法不同

而不同。

true  返回原始流数据。

4.crypt(string $str,$string $salt);

函数返回使用 DES、Blowfish 或 MD5 算法加密的字符串。

具体算法依赖于PHP检查之后支持的算法和$salt的格式和长度,当 然具体结果也和操作系统有关。比较结果采用 hash_equals($crypted,crypt($input,$salt));//且salt值相同

Password_verify($str,$crypted);

5.password_hash ( string $str, integer $algo [, array $options ] )

函数返回哈希加密后的密码字符串, password_hash() 是crypt()的 一个简单封装

$algo : 算法 PASSWORD_DEFAULT ,PASSWORD_BCRYPT

$options = [

“cost”=10,//指明算法递归的层数,

“salt”=“xxadasdsad”//加密盐值,即将被遗 弃,采用系统自动随机生成安全性更高

];

使用的算法、cost 和盐值作为哈希的一部分返回

Password_verify($str,$hashed);

6.base64_encode(string $str)

设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层 传输,例如电子邮件的主体。base64_decode(string $encoded)

可以进行解码;

7.mcrypt_encrypt ( string $cipher , string $key , string $data ,

string $mode [, string $iv ] )

mcrypt_decrypt ( string $cipher , string $key , string $crypted ,

string $mode [, string $iv ] )

$ciper:加密算法,mcrypt_list_algorithms()可以获取该函数所有支持的算法

如MCRYPT_DES(“des”),MCRYPT_RIJNDAEL_128(“rijndael-128”);

$mode : 加密模式 ,mcrypt_list_modes()获取所有支持的加密模式,ecb,cbc

$key: 加密的秘钥,mcrypt_get_key_size ( string $cipher , string $mode )

获取指定的算法和模式所需的密钥长度。$key要满足这个长度,如果长 度无效会报出警告。

$iv : 加密的初始向量,可通过mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_URANDOM ] ),

Iv的参数size:

通过mcrypt_get_iv_size ( string $cipher , string $mode )获取

Iv 的参数source:

初始向量数据来源。可选值有: MCRYPT_RAND (系统随机数生成 器), MCRYPT_DEV_RANDOM (从 /dev/random 文件读取数据) 和  MCRYPT_DEV_URANDOM (从 /dev/urandom 文件读取数据)。 在 Windows 平台,PHP 5.3.0 之前的版本中,仅支持 MCRYPT_RAND。

请注意,在 PHP 5.6.0 之前的版本中, 此参数的默认值 为 MCRYPT_DEV_RANDOM。

Note: 需要注意的是,如果没有更多可用的用来产生随机数据的信息, 那么 MCRYPT_DEV_RANDOM 可能进入阻塞状态。

$data : 要加密的字符串数据

如何用php实现和c#一致的DES加密解密

PHP实现和c#一致的DES加密解密,可以从网上搜到一大堆,但是测试后发现都没法用。以下正确代码是我经过苦苦才找到的。希望大家在系统整合时能用的上。

注意:key的长度为8位以内。

[csharp] view plain copy print?

//C# 版DES 加解密算法  

using System;     

using System.Data;     

using System.Configuration;     

using System.Web;     

using System.Web.Security;     

using System.Web.UI;     

using System.Web.UI.WebControls;     

using System.Web.UI.WebControls.WebParts;     

using System.Web.UI.HtmlControls;     

using System.Data.SqlClient;     

using System.Security.Cryptography;     

using System.IO;     

using System.Text;     

public class Des{     

    //加解密密钥  

    private static  string skey = "12345678";  

    //初始化向量  

    private static byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };   

   

                #region DESEnCode DES加密     

                public static string DESEnCode(string pToEncrypt, string sKey)     

                {     

                    pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt);     

                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();     

                    byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);     

                 

                    //建立加密对象的密钥和偏移量      

                    //原文使用ASCIIEncoding.ASCII方法的GetBytes方法      

                    //使得输入密码必须输入英文文本      

                    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);     

                    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);     

                    MemoryStream ms = new MemoryStream();     

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

                 

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

                    cs.FlushFinalBlock();     

                 

                    StringBuilder ret = new StringBuilder();     

                    foreach (byte b in ms.ToArray())     

                    {     

                        ret.AppendFormat("{0:X2}", b);     

                    }     

                    ret.ToString();     

                    return ret.ToString();     

                }    

                #endregion    

                /// summary  

                ///   

                /// /summary  

                /// param name="pToDecrypt" 待解密的字符串/param  

                /// param name="sKey" 解密密钥,要求为8字节,和加密密钥相同/param  

                /// returns解密成功返回解密后的字符串,失败返源串/returns  

                #region DESDeCode DES解密  

                public static string DESDeCode(string pToDecrypt, string sKey)  

                {  

                    //    HttpContext.Current.Response.Write(pToDecrypt + "br" + sKey);     

                    //    HttpContext.Current.Response.End();     

                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();  

               

                    byte[] inputByteArray = new byte[pToDecrypt.Length / 2];  

                    for (int x = 0; x  pToDecrypt.Length / 2; x++)  

                    {  

                        int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));  

                        inputByteArray[x] = (byte)i;  

                    }  

               

                    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  

                    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  

                    MemoryStream ms = new MemoryStream();  

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

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

                    cs.FlushFinalBlock();  

               

                    StringBuilder ret = new StringBuilder();  

               

                    return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray()));  

                }  

    #endregion   

}

[php] view plain copy print?

?php  

class DES  

{  

    var $key;  

    var $iv; //偏移量  

      

    function DES( $key, $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 );  

    }  

      

}  

?

des加密算法

des加密算法如下:

一、DES加密算法简介

DES(Data Encryption Standard)是目前最为流行的加密算法之一。DES是对称的,也就是说它使用同一个密钥来加密和解密数据。

DES还是一种分组加密算法,该算法每次处理固定长度的数据段,称之为分组。DES分组的大小是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填充位。

从本质上来说,DES的安全性依赖于虚假表象,从密码学的术语来讲就是依赖于“混乱和扩散”的原则。混乱的目的是为隐藏任何明文同密文、或者密钥之间的关系,而扩散的目的是使明文中的有效位和密钥一起组成尽可能多的密文。两者结合到一起就使得安全性变得相对较高。

DES算法具体通过对明文进行一系列的排列和替换操作来将其加密。过程的关键就是从给定的初始密钥中得到16个子密钥的函数。要加密一组明文,每个子密钥按照顺序(1-16)以一系列的位操作施加于数据上,每个子密钥一次,一共重复16次。每一次迭代称之为一轮。要对密文进行解密可以采用同样的步骤,只是子密钥是按照逆向的顺序(16-1)对密文进行处理。

二、DES加密算法加密原理

DES是采用分组加密。使用64位的分组长度和56位的密钥长度,将64位的输入经过一系列变换得到64位的输出。DES算法利用多次组合替代算法和换位算法,通过混淆和扩散的相互作用,把明文编辑成密码强度很高的密文。解密则使用了相同的步骤和相同的密钥。

64位数据为一组进行加密;

初始置换根据一张8*8的置换表,将64位的明文打乱

与56位的密钥经16轮次迭代运算形成的初始密文

最后经过初始逆置换得到分组的最终密文

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。