单向加密 对称加密 非对称加密

单向加密:

    单向加密又称为不可逆加密算法,在加密过程中不使用密钥,明文由系统加密处理成密文,密文无法解密。一般适合于验证,在验证过程中,重新输入明文,并经过同样的加密算法处理,得到相同的密文并被系统重新认证。广泛使用于口令加密。

  一:base64

    常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。

    主要就是BASE64Encoder、BASE64Decoder两个类

    BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充

  二:md5

     message-digest algorithm 5

  三:Crypt加密:

    1.crypt()接受两个参数,第一个为需要加密的字符串,第二个为盐值(就是加密干扰值,如果没有提供,则默认由PHP自动生成);返回散列后的字符串或一个少于 13 字符的字符串,后者为了区别盐值。

    2.crypt()为单向加密,跟md5一样。

  四:Sha1加密:

    

string sha1 ( string str[,boolraw_output = false ]

1.跟md5很像,不同的是sha1()默认情况下返回40个字符的散列值,传入参数性质一样,第一个为加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,sha1()则会返回原始的20 位原始格式报文摘要

2.sha1()也是单行加密,没有逆向解密算法

  五:Urlencode加密:

    

string urlencode ( string $str )

1.一个参数,传入要加密的字符串(通常应用于对URL的加密),

2.urlencode为双向加密,可以用urldecode来加密(严格意义上来说,不算真正的加密)

3.返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

  

  对称加密:

    采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

  优缺点:

    对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

    对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

  非对称加密:

  先说非对称加密  .  直接理解为   2把钥匙.  分别叫 公钥  私钥一把加密,另一把解密.   (每把都可用于加密,但是对应的那把才能解密)

  比如. 一间屋子,有2个门 ,对应2把不同的钥匙. 规则是,前门进,后门出或是后门前,前门出. 
如果从前门进,只能使用前门钥匙进.  出去的话从后门出,只能使用后门钥匙.   
如果后门进,就得用后门钥匙.出去走前门,只能用前门钥匙出. 
那么PHP如何得到这两把钥匙呢,,,,php中,借助openssl实现.首先确定一下是否支持  phpinfo中 搜索 openssl 如果出现下图说明成功支持,本文建议在linux下测试

在生成钥匙之前先要了解一个概念   1个是钥匙文件(里面是钥匙字符串) . 1个是钥匙对象.(专门用于各种操作,理解为实例化后使用)
生成文件 代码如下

 1 <?php
 2 //第一步,生成一把新钥匙对象这是私钥对象
 3 $key = openssl_pkey_new();
 4 //第二步,把生成的私钥,保存成私钥文件
 5 openssl_pkey_export_to_file($key, ‘./private.txt‘);
 6 //下面这句注视的意思是,从现有的私钥文件,获取到私钥对象
 7 //$key = openssl_get_privatekey(file_get_contents( ‘./private.txt‘));
 8 //从私钥中,获取公钥字符串  后面[‘key‘]的意思是从这个数组中直接获取该键
 9 $key_detail = openssl_pkey_get_details($key)[‘key‘];
10 //把公钥字符串,保存成文件
11 file_put_contents(‘./public.txt‘, $key_detail);
12 echo ‘完成‘;

刷新生成成功后.如图

到此.钥匙获取完毕. 下一篇讲加密
可以借助linux中的 ssh_keygen命令来生成 代码如下

1 ssh-keygen -t rsa -N ‘‘ -f ./key -q

上面代码中  
-t是指类型  rsa
-N ‘‘不需要密码
-f 指定生成的私钥文件 是当前目录下的key
-q 不需要废话.直接生成

执行完后当前目录 会生成一个key 和一个key.pub  这两个文件 对应的也是公钥和私钥

注意  php源码中这样定义

1 enum php_openssl_key_type {
2         OPENSSL_KEYTYPE_RSA,
3         OPENSSL_KEYTYPE_DSA,
4         OPENSSL_KEYTYPE_DH,
5         OPENSSL_KEYTYPE_DEFAULT = OPENSSL_KEYTYPE_RSA
6 };

可以看出.加密方式有rsa  dsa  dh   默认是rsa

 1 <?php
 2 //第一步,取出私钥。
 3 $private_key=openssl_get_privatekey(file_get_contents(‘./private.txt‘));
 4 //第二步,取出公钥,2种方式 ,一种是从文件中取,如下
 5 //$public_key=openssl_get_publickey(file_get_contents(‘./public.txt‘));
 6 //另一种是,从私钥里面取 ,理论上内存中计算要比文件中获取要快,两种方法任选其一
 7 $public_key=openssl_get_publickey(openssl_pkey_get_details($private_key)[‘key‘]);
 8 //原字符串
 9 $origin_str=‘中英文Abc+123‘;
10 //使用公钥k加密函数进行加密,第一个参数原文,第二个参数是结果。 第三个参数是 公钥对象 (私钥对象会报错)
11 openssl_public_encrypt($origin_str, $crypted, $public_key);
12 //var_dump($crypted是乱码);
13 //使用公钥加密后。只能使用私钥解密函数进行解密,注意第三个参数是私钥对象
14 openssl_private_decrypt($crypted, $decrypted, $private_key);
15 //var_dump($decrypted)得到了原文
16 //也可以 相反的操作。 私钥加密,公钥解密。如下
17 openssl_private_encrypt($origin_str, $crypted, $private_key);
18 openssl_public_decrypt($crypted, $result, $public_key);
19 //vardump($result)也是原文

一般实际应用中,其中一个页面加密后.传给另一个页面密文.然后通过密文进行解密.然后得到结果.

注意,公钥加密,需要私钥解密
或是 私钥加密,公钥解密.   
另外.公钥函数只能使用公钥对象. 私钥相同.
还记得之前说过.私钥中提取公钥吗?所以说.最好使用公钥加密,以免传送过程被拦截私钥

自己的代码:

 1 <?php
 2 //生成私钥文件
 3 //$key=openssl_pkey_new();
 4 //openssl_pkey_export_to_file($key,‘./1.txt‘);
 5
 6 //从文件中提取
 7 //$key=openssl_get_privatekey(file_get_contents(‘./1.txt‘));
 8 //$key_dets=openssl_pkey_get_details($key)[‘key‘];
 9 //
10 //file_put_contents(‘./2.txt‘,$key_dets);
11
12
13 //第一步 提取私钥
14 $privatekey=openssl_get_privatekey(file_get_contents(‘./1.txt‘));
15 //第二步 取出公钥 2种方法 一种文件中取
16 $putkey=openssl_get_publickey(file_get_contents(‘./5.txt‘));
17
18 //另一种从私钥文件中取
19 //$putkey=openssl_get_publickey(openssl_pkey_get_details($privatekey)[‘key‘]);
20 //原字符串
21 //var_dump($privatekey,$putkey);
22
23 $orign_str=‘中文‘;
24 openssl_public_encrypt($orign_str,$crypted,$putkey);
25 //var_dump($crypted);
26 openssl_private_decrypt($crypted,$decrypted,$privatekey);
27 var_dump($decrypted);
28 ?>
时间: 2024-10-10 13:09:46

单向加密 对称加密 非对称加密的相关文章

Java对称与非对称加密解密,AES与RSA

加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么要有非对称加密,解密技术呢 假设这样一种场景A要发送一段消息给B,但是又不想以明文发送,所以就需要对消息进行加密.如果采用对称加密技术,那么加密与解密用的是同一把秘钥.除非B事先就知道A的秘钥,并且保存好.这样才可以解密A发来的消息. 由于对称技术只有一把秘钥,所以秘钥的管理是一个很麻烦的问题.而非

第十四章 调试及安全性(In .net4.5) 之 对称及非对称加密

1. 概述 本章内容包括:对称及非对称加密算法..net中的加密类.使用哈希操作.创建和管理签名认证.代码访问权限 和 加密字符串. 2. 主要内容 2.1 使用对称和非对称加密 ① 对称加密:使用同一个密钥来加密和解密数据,密钥的安全传输是一个很重要的问题. ② 非对称加密:使用两个关联的密钥(公钥和私钥),公钥公开,私钥保密.用公钥加密的信息可以用私钥解密,反之亦然. ③ 对称加密 速度快,适用大数据量情况.使用两种加密算法的组合方式,可以实现大数据的加密传输. *密钥之外的另一种加密方式是

【安全加密技术】非对称加密

转载请注明出处:http://blog.csdn.net/sk719887916/article/details/46810595 看过上篇网络互联基系列基础的朋友,对安全产生的原因以及策略度有所了解,当然作为开发者来讲,网络传输中的安全问题我们不必过多的关心,我们关心的是发送方加密和接收方对数据的解密过程,也就是网络安全中的一面边缘学科,密码学中的一种数据加密技术,目前业界的加密方式主要有对称加密和非堆成加密,那就先来了解下有非对称加密以及所关联的相关名字. 非对称加密 非对称加密算法是一种密

.Net加密与解密——非对称加密之加密模式

一,非对称加密 非对称加密具有一组密钥对,一个是对外公开的,任何人都可以获取,称为公钥: 一个是自行保管并严格保密的,称为私钥. 规则如下: 由某人A的公钥加密消息,只能由A的私钥进行解密: 由A的私钥加密的消息,只能由A的公钥解密. 发送方,接收方都持有公钥/私钥对,因此一共会有四个密钥.非堆成加密的好处在于,私钥自己持有,公钥完全公开. 二,加密模式 步骤: 1,接收方公布自己的公钥,任何人都可以获得. 2,发送方使用接收方的公钥对消息进行加密,然后发送. 3,接收方使用自己的私钥对消息进行

对称与非对称加密;SSL;HTTPS;AJP

1.对称加密就是加密与解密的时候都是用一个密码 2.非对称加密,有一对密码A,B:用A加密就得用B解密,相对的用B加密就得用A解密 3.公钥与私钥,这一对密码,随便拿一个公布出去,那个就是公钥,剩下一个是私钥. 4.应用1:我想给一个人发信息,我就去拿他公布出来的公钥加密,加密后就只能用私钥来解密,由于私钥在他手中,就能很好在传输中保密. 5.应用2:我收到一个信息,说是银行发来的账单,银行为了不被别人冒牌货发假信息给客户,事先给客户说好,我给你发信息是我的私钥加密了的,所以客户到了信息就要去拿

Android Keystore 对称-非对称加密

Android 提供了 KeyStore 等可以长期存储和检索加密密钥的机制,Android KeyStore 系统特别适合于存储加密密钥. “AndroidKeyStore” 是 KeyStore 的一个子集,存进 AndroidKeyStore 的 key 将受到签名保护,并且这些 key 是存在系统里的,而不是在 App 的 data 目录下,依托于硬件的 KeyChain 存储,可以做到 private key 一旦存入就无法取出, 每个 App 自己创建的 key,别的应用是访问不到的

.Net加密与解密——非对称加密之数字签名

一,从非对称加密的认证模式说起 由消息的发送方发布公钥,持有私钥. 步骤: 1,发送方公布自己的公钥,任何人都可以获得. 2,发送方使用自己的私钥对消息进行加密,然后发送. 3,接收方使用发送方的公钥对消息进行解密. 缺点: 1,任何截获该消息的第三方都能够使用发送方公钥进行解密: 2,耗时,不适用于大数据 二,数字签名       过程: 1,发送方对想要传递的消息进行散列运算,得到原始消息摘要.(摘要可以代表消息本身,相当于指纹) 2,发送方使用自己的私钥只对消息摘要进行加密,该过程也称作签

对称加密与非对称加密

(一)对称加密(Symmetric Cryptography) 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解:但如果你的密钥有1 MB

第10章 网络安全(1)_对称加密和非对称加密

1 网络安全概述 1.1 计算机网络面临的安全威协 (1)截获:攻击者从网络上窃听他人的通信内容,通常把这类攻击称为"截获".在被动攻击中,攻击者只是观察和分析某一个协议数据单元(PDU)而不干扰信息流. (2)篡改:攻击者篡改网络上传递的报文.这里包括彻底中断传递的报文,甚至把完全伪造的报文传送给接收方,这种攻击也有时也称为"更改报文流".如DNS劫持(域名劫持),安装黑客软件Cain可以进行验证. (3)恶意程序:是一种特殊的主动攻击形式.如计算机病毒.蠕虫.木

对称加密与非对称加密 浅析

对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解:但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费