金沙糖果派对网站app 5

单项散列加密本领(不可逆的加密卡塔尔(قطر‎

归于摘要算法,不是一种加密算法,功能是把跋扈长的输入字符串变化成固定长的出口串的一种函数

MD5

三、非对称加密算法 

概念:

非对称加密算法须求五个密钥:公开密钥(publickey)和民用密钥(privatekey)。公开密钥与私家密钥是有的,假使用公开密钥对数码进行加密,独有用相应的民用密钥本领解密;倘若用个人密钥对数码进行加密,那么独有用相应的公开密钥技能解密。因为加密和平解决密使用的是多个区别的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法完结机密消息交流的骨干历程是:甲方生成一对密钥并将内部的一把作为公用密钥向其他方公开;得到该公用密钥的乙方使用该密钥对机密音讯进行加密后再发送给甲方;甲方再用本中国人民保险公司留的另一把专用密钥对加密后的音讯实行解密。另一面,甲方能够使用乙方的公钥对机密新闻实行签订合同后再发送给乙方;乙方再用本身的私匙对数码进行验签。甲方只好用其专项使用密钥解密由其公用密钥加密后的别的消息。
非对称加密算法的保密性比较好,它消释了最终顾客沟通密钥的内需。

原理图:

现象1:发送者用接受者的公钥加密,接纳者用本身的私钥解密,具体如下图

金沙糖果派对网站app 1

场景2:发送者用本人的私钥加密,选用者用发送者公布的公钥解密,具体如下图

金沙糖果派对网站app 2

境况3:数字具名中央银行使,这里暂不进行介绍,后续有连带艺术张开详尽介绍。

见:

优点:非对称加密系统不要求通信两方事情未发生前传递密钥或有任何约定就会刻不容缓保密通讯,而且密钥处理有帮衬,可达成幸免杜撰和抵赖,因而,更切合互连网通讯中的保密通讯供给

关键算法:传祺SA、Elgamal、马鞍包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

 

什么样是对称加密手艺?

     
 选用单钥密码系统的加密方法,同二个密钥能够同一时候作为音信的加密和平解决密,这种加密方法称为对称加密,也称之为单密钥加密。须求对加密和解密使用同一密钥的加密算法。由于其速度快,对称性加密平常在新闻发送方需求加密多量多少时利用。对称性加密也称之为密钥加密。

     
 所谓对称,正是利用这种加密方法的双边采纳方式用同样的密钥实行加密和解密。密钥是决定加密及解密进程的吩咐。算法是一组准则,规定何以开展加密和平解决密。

     
 由此加密的安全性不仅仅决计于加密算法本身,密钥管理的安全性更是主要。因为加密和解密都选择同叁个密钥,怎样把密钥安全地传递到解密者手上就成了总得要缓和的难题。

     
 在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。

Urlencode/Urldecode

string urlencode ( string $str ) 
/*
1. 一个参数,传入要加密的字符串(通常应用于对URL的加密)
2. urlencode为双向加密,可以用urldecode来加密(严格意义上来说,不算真正的加密,更像是一种编码方式)
3. 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
*/

透过Urlencode函数解决链接中包括&字符引起的主题材料:

<?php
$pre_url_encode="zhougang.com?username=zhougang&password=zhou"; //在实际开发中,我们很多时候要构造这种URL,这是没有问题的
$url_decode    ="zhougang.com?username=zhou&gang&password=zhou";//但是这种情况下用$_GET()来接受是会出问题的;
/*
Array
(
  [username] => zhou
  [gang] => 
  [password] => zhou
)
 */

//如下解决问题:
$username="zhou&gang";
$url_decode="zhougang.com?username=".urlencode($username)."&password=zhou";
?>

广大的urlencode(State of Qatar的转变字符

?=> %3F
= => %3D
% => %25
& => %26
\ => %5C

如图所示,甲乙之间利用非对称加密的办法成功了第一新闻的安全传输。

 概述

数码加密的基本进度正是对原来为公开的公文或数额按某种算法进行管理,使其成为不可读的一段代码,经常号称“密文”,使其只好在输入相应的密钥之后技能显示出本来内容,通过如此的门路来达成保养数量不被违法人盗取、阅读的指标。
该进度的逆进度为解密,就要该编码新闻转变为其原本数据的长河。加密起家在对消息进行数学编码和解码的根基上。加密类型分为二种,对称加密与非对称加密,对称加密两岸动用一块密钥。非对称加密,这种加密方法存在多个密钥,二个是公私密钥(对曾祖父开),一种是自身人密钥(对外保密)。
 

概述

加密手艺包涵八个要素:算法和密钥。算法是将普通的音信大概能够领略的音讯与一串数字(密钥)结合,发生不可掌握的密文的步骤,密钥是用来对数据举办编码和平解决密的一种算法。在平安全保卫密中,可经过适当的钥加密技艺和管理机制来确定保障互联网的音信通讯安全。

软件的加密与解密是三个可喜的斟酌世界,它差少之甚少能够与自由一种微型机手艺紧密结合——密码学、次第设计语言、操作系统、数据布局。而出于那样大概那样的案由,对于这一领域的关注程度直接还处在低温状态。而看雪本领论坛相信会为越多对文化怀有期盼的意中人多开辟一条走向那些小圈子的征途,况兼随着推动这些领域的处处开荒进取。

MD5

string md5 ( string $str [, bool $raw_output = false ] ); //MD5加密,输入任意长度字符串返回一个唯一的32位字符

md5(卡塔尔(قطر‎为单向加密,未有逆向解密算法,然而依然得以对部分经常见到的字符串通过搜集,枚举,碰撞等措施破解;所认为了让其破解起来更麻烦一些,所以大家平日加一点盐值(saltState of Qatar等量齐观复MD5;

md5(md5($password).'sdva');

sdva即使盐值,该盐值应该是随机的,比如md5常用在密码加密上,所以在登记的时候笔者会随机生成那些字符串,然后经过地方的法子来重新加密一下;

string md5 ( string $str [, bool $raw_output = false ] 卡塔尔(قطر‎;
//MD5加密,输入随机长度字符串重临贰个独一的三十四位字符

一、摘要算法

多少摘要算法是密码学算法中非常关键的一个分层,它经过对负有数据提取指纹新闻以落成多少具名、数据完整性校验等效用,由于其不可逆性,一时候会被用做敏感消息的加密。数据摘要算法也被叫做哈希(Hash)算法或散列算法。

从严酷意义上讲,摘要算法不是加密算法,但在具体行使中近乎于加密算法使用,也许与加密算法一齐行使,这里也拿来介绍下。

动用范围:密码加密、数据完整性校验、数字签字等

此间介绍常用的三种摘要算法,MD5与SHA1。

提示:当前MD5已经被破解,推荐使用SHA1

加解密进程:

非对称加密专业经过大致示意图

金沙糖果派对网站app 3

1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。

2、获得该公钥的甲方使用该密钥对机密音讯进行加密后再发送给乙方。

3、乙方再用本身保留的另一把专用密钥(私钥)对加密后的音信举行解密。乙方只好用其专项使用密钥(私钥)解密由相应的公钥加密后的音讯。

在传输进度中,就算攻击者截获了传输的密文,并获得了乙的公钥,也敬谢不敏破解密文,因为唯有乙的私钥技巧解密密文。

雷同,假如乙要回复加密音信给甲,那么供给甲先公布甲的公钥给乙用于加密,甲自身保存甲的私钥用于解密。

一直以来是一道面试答错的主题材料,面试官问笔者非对称加密算法中有如何杰出的算法?
那时候自个儿愣了须臾间,因为本人把非对称加密与单项散列加密的概念弄混淆了,所以更毫不说怎么非对称加密算法中有如何特出算法,结果当然也让面试官愣了须臾间,所以昨天就花点时间说说PHP中的音信加密技能

以下是我们PHP程序中常用到的相得益彰加密算法

1、MD5

哈希函数将随机长度的二进制字符串映射为定点长度的袖珍二进制字符串。
加密哈希函数有那般贰天性质:在测算上一点都不大可能找到散列为雷同的值的四个分歧的输入;也便是说,两组数据的哈希值仅在相应的数码也相当时才会合作。
数据的为数非常少转移会在哈希值中产生不可预感的雅量改成。MD5 算法的哈希值大小为
128 位。
MD5 类的 ComputeHash 方法将哈希作为 16 字节的数组再次回到。 请注意,有个别 MD5
完结会生成 32 字符的十四进制格式哈希。 若要与此类完毕举行互操作,请将
ComputeHash 方法的回到值格式化为十八进制值。

 MD5加密:

        /// <summary>
        /// MD5加密为32字符长度的16进制字符串
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string EncryptByMD5(string input)
        {
            MD5 md5Hasher = MD5.Create();
            byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(input));

            StringBuilder sBuilder = new StringBuilder();
            //将每个字节转为16进制
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            return sBuilder.ToString();            
        }

  

优缺点:

     
 对称加密算法的帮助和益处是算法公开、计算量小、加密速度快、加密功能高。

     
 对称加密算法的毛病是在数额传送前,发送方和选择方必须签定好秘钥,然后使双边都能保留好秘钥。其次假若一方的秘钥被外泄,那么加密音讯也就不安全了。此外,每对顾客每一次使用对称加密算法时,都要求接收别的人不通晓的并世无两秘钥,那会使得收、发双方所负有的钥匙数量庞大,密钥管理改为两岸的承当。

加解密函数encrypt(卡塔尔

<?php
//$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙
function encrypt($string,$operation,$key=''){ 
    $key=md5($key); 
    $key_length=strlen($key); 
      $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; 
    $string_length=strlen($string); 
    $rndkey=$box=array(); 
    $result=''; 
    for($i=0;$i<=255;$i++){ 
           $rndkey[$i]=ord($key[$i%$key_length]); 
        $box[$i]=$i; 
    } 
    for($j=$i=0;$i<256;$i++){ 
        $j=($j+$box[$i]+$rndkey[$i])%256; 
        $tmp=$box[$i]; 
        $box[$i]=$box[$j]; 
        $box[$j]=$tmp; 
    } 
    for($a=$j=$i=0;$i<$string_length;$i++){ 
        $a=($a+1)%256; 
        $j=($j+$box[$a])%256; 
        $tmp=$box[$a]; 
        $box[$a]=$box[$j]; 
        $box[$j]=$tmp; 
        $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); 
    } 
    if($operation=='D'){ 
        if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ 
            return substr($result,8); 
        }else{ 
            return''; 
        } 
    }else{ 
        return str_replace('=','',base64_encode($result)); 
    } 
}
?>

非对称加密算法供给多个密钥来开展加密和解密,那三个秘钥是公开密钥和民用密钥;

 二、对称加密

对称加密(也叫私钥加密State of Qatar指加密和平解决密使用同一密钥的加密算法。一时又叫守旧密码算法,正是加密密钥能够从解密密钥中推算出来,同一时候解密密钥也得以从加密密钥中推算出来。而在大非常多的对称算法中,加密密钥和解密密钥是同样的,所以也称这种加密算法为机要密钥算法或单密钥算法。

原理图:

金沙糖果派对网站app 4

亮点:算法公开、计算量小、加密速度快、加密效用高。
缺欠:密钥管理困难,使用花销较高。与公开密钥加密算法比起来,对称加密算法能够提供加密和注明却缺乏了签名效用,使得应用约束有所压缩。

常用的对称加密算法有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等

选用途景:数据传输、大数据量加密、敏感数据加密等等

此间关键介绍常用的DES与AES加密算法。

提醒: DES已经被破解,推荐使用3DES或AES

怎么着是加密技术?

加密技巧是电商应用的机要安全保密措施,是最常用的鹤岗保密手腕,利用技能花招把重点的多少形成乱码(加密)传送,达到目标地后再用同一或差异的手段还原(解密)。加密技术包含三个因素:算法和密钥。算法是将常常的公文(恐怕能够驾驭的音讯)与一串数字(密钥)的组成,产生不可驾驭的密文的手续,密钥是用来对数码实行编码和平解决码的一种算法。在达州保密中,可由此适当的密钥加密技能和管理机制来作保网络的新闻报纸发表安全。密钥加密才干的密码体制分成对称密钥体制和非对称密钥体制二种。相应地,对数据加密的技能分为两类,即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以多少加密标准(DES,Data
Encryption
Standard)算法为独立代表,非对称加密不乏先例以RSA(Rivest
Shamir
Ad1eman)算法为代表。对称加密的加密密钥和平解决密密钥肖似,而非对称加密的加密密钥和解密密钥区别,加密密钥能够公开而解密密钥供给保密。

base64

string base64_decode ( string $encoded_data )
  1. base64_encode(卡塔尔选取四个参数,也正是要编码的数据(这里不说字符串,是因为众多时候base64用来编码图片)
  2. base64_encode(卡塔尔(قطر‎为双向加密,可用base64_decode()来解密

$data=file_get_contents($filename);
echo base64_encode($data);
/*然后你查看网页源码就会得到一大串base64的字符串,
再用base64_decode()还原就可以得到图片。这也可以作为移动端上传图片的处理方案之一(但是不建议这样做哈)
*/

严苛的来讲..那四个函数其实不算是加密,更像是一种格式的类别化

以下是大家PHP程序中常用到的对称加密算法

md5(卡塔尔为单向加密,未有逆向解密算法,然则还能对一部分广大的字符串通过募集,枚举,碰撞等方法破解;所以为了让其破解起来更麻烦一些,所以大家通常加一点盐值玉石俱焚新MD5;

1、RSA

大切诺基SA(Rivest-Shamir-Adleman卡塔尔国算法是基于大数不容许被质因数分解假诺的公钥类别。轻巧地说正是找七个十分的大的质数。贰个对伯公开的为”公钥”(Public
key) ,另一个不报告任哪个人,称为”私钥”(Private
key)。那多个密钥是补偿的,也正是说用公钥加密的密文能够用私钥解密,反过来也相仿。

假如客户甲要寄信给顾客乙,他们相互明白对方的公钥。甲就用乙的公钥加密邮件寄出,乙收到后就能够用本身的私钥解密出甲的原稿。由于外人不通晓乙的私钥,所以即就是甲自个儿也无能为力解密那封信,那就缓和了信件保密的主题材料。其他方面,由于各个人都清楚乙的公钥,他们都可以给乙发信,那么乙怎么确信是或不是甲的上书呢?那将在使用基于加密技巧的数字签字了。
甲用自个儿的私钥将签订内容加密,附加在邮件后,再用乙的公钥将整个邮件加密(注意这里的主次,假设先加密再签字的话,别人能够将签订公约去掉后签上本人的具名,进而窜改了签订左券)。那样那份密文被乙收到以往,乙用自身的私钥将邮件解密,获得甲的原稿和数字签字,然后用甲的公钥解密签字,那样一来就足以确定保障两方面包车型客车平安了。

加密:

        /// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="plaintext">明文</param>
        /// <param name="publicKey">公钥</param>
        /// <returns>密文字符串</returns>
        public static string EncryptByRSA(string plaintext, string publicKey)
        {           
            UnicodeEncoding ByteConverter = new UnicodeEncoding();         
            byte[] dataToEncrypt = ByteConverter.GetBytes(plaintext);
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {
                RSA.FromXmlString(publicKey);
                byte[] encryptedData = RSA.Encrypt(dataToEncrypt, false);
                return Convert.ToBase64String(encryptedData);
            }
        }

 

解密:

        /// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="ciphertext">密文</param>
        /// <param name="privateKey">私钥</param>
        /// <returns>明文字符串</returns>
        public static string DecryptByRSA(string ciphertext, string privateKey)
        {
            UnicodeEncoding byteConverter = new UnicodeEncoding();
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {
                RSA.FromXmlString(privateKey);
                byte[] encryptedData = Convert.FromBase64String(ciphertext);
                byte[] decryptedData = RSA.Decrypt(encryptedData, false);
                return byteConverter.GetString(decryptedData);
            }
        }

 

优缺点:

非对称加密与对称加密绝对来说,其安全性越来越好:对称加密的通讯双方采纳同样的秘钥,要是一方的秘钥遭泄漏,那么一切通讯就能够被破解。而非对称加密行使一对秘钥,一个用来加密,三个用来解密,并且公钥是当面的,秘钥是和睦保留的,不必要像对称加密那样在通讯在此之前要先同步秘钥。

非对称加密的败笔是加密和平解决密费用时间长、速度慢,只切合对小量多少开展加密。

在非对称加密中运用的重要算法有:RSA、Elgamal、手拿包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。

非对称加密

非对称加密算法要求七个密钥来展开加密和平解决密,那多少个秘钥是公开密钥(public
key,简单称谓公钥)和个人密钥(private key,简单的称呼私钥);

金沙糖果派对网站app 5

如图所示,甲乙之直接纳非对称加密的章程完毕了主要音讯的安全传输。

  1. 乙方生成一对密钥(公钥和私钥)并将公钥向任何方公开。
  2. 金沙糖果派对网站app,取得该公钥的甲方使用该密钥对机密音信实行加密后再发送给乙方。
  3. 乙方再用本身保留的另一把专项使用密钥(私钥)对加密后的音信实行解密。乙方只可以用其专项使用密钥(私钥)解密由相应的公钥加密后的音讯。

在传输进度中,就算攻击者截获了传输的密文,并获得了乙的公钥,也回天乏术破解密文,因为唯有乙的私钥手艺解密密文
同等,借使乙要回复加密音讯给甲,那么必要甲头阵布甲的公钥给乙用于加密,甲自身保存甲的私钥用于解密。

在非对称加密中央银行使的基本点算法有:LANDSA、Elgamal、手包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。 个中咱们最见的算法是CR-VSA算法

以下是从网络摘抄的一段PHP通过openssl完结非对称加密的算法

<?php
/**
 * 使用openssl实现非对称加密
 * @since 2010-07-08
 */
class Rsa {
    /**
     * private key
     */
    private $_privKey;
    /**
     * public key
     */
    private $_pubKey;
    /**
     * the keys saving path
     */
    private $_keyPath;
    /**
     * the construtor,the param $path is the keys saving path
     */
    public function __construct($path) {
        if (empty($path) || !is_dir($path)) {
            throw new Exception('Must set the keys save path');
        }
        $this->_keyPath = $path;
    }
    /**
     * create the key pair,save the key to $this->_keyPath
     */
    public function createKey() {
        $r = openssl_pkey_new();
        openssl_pkey_export($r, $privKey);
        file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key', $privKey);
        $this->_privKey = openssl_pkey_get_public($privKey);
        $rp = openssl_pkey_get_details($r);
        $pubKey = $rp['key'];
        file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key', $pubKey);
        $this->_pubKey = openssl_pkey_get_public($pubKey);
    }
    /**
     * setup the private key
     */
    public function setupPrivKey() {
        if (is_resource($this->_privKey)) {
            return true;
        }
        $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';
        $prk = file_get_contents($file);
        $this->_privKey = openssl_pkey_get_private($prk);
        return true;
    }
    /**
     * setup the public key
     */
    public function setupPubKey() {
        if (is_resource($this->_pubKey)) {
            return true;
        }
        $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key';
        $puk = file_get_contents($file);
        $this->_pubKey = openssl_pkey_get_public($puk);
        return true;
    }
    /**
     * encrypt with the private key
     */
    public function privEncrypt($data) {
        if (!is_string($data)) {
            return null;
        }
        $this->setupPrivKey();
        $r = openssl_private_encrypt($data, $encrypted, $this->_privKey);
        if ($r) {
            return base64_encode($encrypted);
        }
        return null;
    }
    /**
     * decrypt with the private key
     */
    public function privDecrypt($encrypted) {
        if (!is_string($encrypted)) {
            return null;
        }
        $this->setupPrivKey();
        $encrypted = base64_decode($encrypted);
        $r = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);
        if ($r) {
            return $decrypted;
        }
        return null;
    }
    /**
     * encrypt with public key
     */
    public function pubEncrypt($data) {
        if (!is_string($data)) {
            return null;
        }
        $this->setupPubKey();
        $r = openssl_public_encrypt($data, $encrypted, $this->_pubKey);
        if ($r) {
            return base64_encode($encrypted);
        }
        return null;
    }
    /**
     * decrypt with the public key
     */
    public function pubDecrypt($crypted) {
        if (!is_string($crypted)) {
            return null;
        }
        $this->setupPubKey();
        $crypted = base64_decode($crypted);
        $r = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);
        if ($r) {
            return $decrypted;
        }
        return null;
    }
    public function __destruct() {
        @fclose($this->_privKey);
        @fclose($this->_pubKey);
    }
}
//以下是一个简单的测试demo,如果不需要请删除
$rsa = new Rsa('ssl-key');
//私钥加密,公钥解密
echo 'source:我是老鳖<br />';
$pre = $rsa->privEncrypt('我是老鳖');
echo 'private encrypted:<br />' . $pre . '<br />';
$pud = $rsa->pubDecrypt($pre);
echo 'public decrypted:' . $pud . '<br />';
//公钥加密,私钥解密
echo 'source:干IT的<br />';
$pue = $rsa->pubEncrypt('干IT的');
echo 'public encrypt:<br />' . $pue . '<br />';
$prd = $rsa->privDecrypt($pue);
echo 'private decrypt:' . $prd;
?>

谢谢阅读,希望能支持到大家,多谢大家对本站的扶助!

抱有案例,见测量检验DEMO

源码地址:

 

 

什么样是非对称加密技巧?

       
对称加密算法在加密和平解决密时行使的是同三个秘钥;而金沙糖果派对2015cc,非对称加密算法亟需八个密钥来拓宽加密和平解决密,那多少个秘钥是公开密钥(public
key,简单的称呼公钥)和民用密钥(private key,简单称谓私钥)。

       
与对称加密算法不同,非对称加密算法内需三个密钥:公开密钥(publickey)和个人密钥(privatekey)。公开密钥与民用密钥是部分,假设用公开密钥对数据实行加密,唯有用相应的私房密钥才干解密;借使用个人密钥对数据开展加密,那么唯有用相应的公开密钥才具解密。因为加密和解密使用的是四个例外的密钥,所以这种算法叫作非对称加密算法。

如下图所示,甲乙之间利用非对称加密的措施成功了主要新闻的安全传输。

新闻加密本事的归类

单项散列加密手艺

C#编制程序总括(七)数据加密——附源码

Sha1加密:

string sha1 ( string $str [, bool $raw_output = false ]); //跟md5很像,不同的是sha1()默认情况下返回40个字符的散列值,传入参数性质一样,第一个为加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,sha1()则会返回原始的20 位原始格式报文摘要
<?php
$my_intro="zhouxiaogang";
echo sha1($my_intro); // b6773e8c180c693d9f875bcf77c1202a243e8594
echo "<hr>";
//当然,可以将多种加密算法混合使用
echo md5(sha1($my_intro));
//输出:54818bd624d69ac9a139bf92251e381d
//这种方式的双重加密也可以提高数据的安全性
 zhou [gang] => [password] => zhou ) */ //如下解决问题: $username="zhou&gang"; $url_decode="zhougang.com?username=".urlencode."&password=zhou"; ?> 常见的urlencode()的转换字符 ?=> %3F = => %3D % => %25 & => %26 \ => %5C base64 string base64_decode ( string $encoded_data ) base64_encode()接受一个参数,也就是要编码的数据(这里不说字符串,是因为很多时候base64用来编码图片) base64_encode()为双向加密,可用base64_decode()来解密 $data=file_get_contents; echo base64_encode; /*然后你查看网页源码就会得到一大串base64的字符串, 再用base64_decode()还原就可以得到图片。这也可以作为移动端上传图片的处理方案之一 */?> 

2、AES

意味着高档加密典型 (AES卡塔尔国 的享有完毕都必须从当中世襲的空洞基类。

密码学中的高端加密标准(Advanced Encryption
Standard,AES),又称Rijndael加密法,是美利坚联邦合众国际缔盟邦政坛利用的一种区块加密标准。这些正式用来顶替原先的DES,已经被多方剖析且广为满世界所利用。

加密:

        /// <summary>  
        /// AES加密算法  
        /// </summary>  
        /// <param name="input">明文字符串</param>  
        /// <param name="key">密钥</param>  
        /// <returns>字符串</returns>  
        public static string EncryptByAES(string input, string key)
        {
            byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
            using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
            {
                aesAlg.Key = keyBytes;
                aesAlg.IV = AES_IV;

                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(input);
                        }
                        byte[] bytes = msEncrypt.ToArray();
                        //return Convert.ToBase64String(bytes);//此方法不可用
                        return BitConverter.ToString(bytes);
                    }
                }
            }
        }

解密:

        /// <summary>  
        /// AES解密  
        /// </summary>  
        /// <param name="input">密文字节数组</param>  
        /// <param name="key">密钥</param>  
        /// <returns>返回解密后的字符串</returns>  
        public static string DecryptByAES(string input, string key)
        {
            //byte[] inputBytes = Convert.FromBase64String(input); //Encoding.UTF8.GetBytes(input);
            string[] sInput = input.Split("-".ToCharArray());
            byte[] inputBytes = new byte[sInput.Length];
            for (int i = 0; i < sInput.Length; i++)
            {
                inputBytes[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
            }
            byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32)); 
            using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
            {
                aesAlg.Key = keyBytes;
                aesAlg.IV = AES_IV;

                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srEncrypt = new StreamReader(csEncrypt))
                        {
                            return srEncrypt.ReadToEnd();
                        }
                    }
                }
            }           
        }

 

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注