这个跟php没有关系,单纯的是两个密码学的算法。如果真想搞清楚区别,你需要有密码学的基础知识。
我简单说一下,这两个都是标准的密码学算法,应用广泛。AES是一个对称加密算法,常常用于对数据进行加密,RSA是一个非对称(公钥)加密算法,常常用于对AES加密用的密钥进行加密,或者进行数字签名等。
至于对称加密算法和非对称加密算法的区别说起来就越来越多了。你只要知道以下事实就好:
对称加密算法加解密密钥相同,而非对称加密算法加解密密钥不同
对称加密算法相对于非对称加密算法而言往往加解密速度很快
非对称加密算法具有任何有公钥的人都能加密数据,但是只有有私钥的人才能解密数据的特点
㈡ 加密IC加密方式有哪些
当前推荐的有几种方式,安全性由低到高分别为:
方式一,使用加密芯片内部存储的一些数据(通常芯片唯一ID),在程序执行前或过程中做ID验证,判断是否为合法加密IC,如不合法则禁止操作
优点:操作简单
缺点:安全性很低,一旦被截获,则芯片失效
方式二
与方式一原理相似,但存储在加密芯片中的为密钥(AES
或者
DES,密钥长度8字节或16字节),程序运行前或运行中,取随机数
由加密芯片和程序本身对随机数加密,验证结果是否相同来判断是否合法。
优点:芯片操作简单
缺点:安全性有缺陷,如果MCU端程序被破解,会导致密钥泄露,芯片失效
方式三
可编程类加密芯片,可将MCU端的部分程序移植到加密芯片中,程序运行时由MCU端程序和加密芯片配合来实现完整程序的执行。
优点:安全性高,MCU端被破解不会影响程序安全性,必须破解加密芯片
缺点:开发略显复杂
综上所述:如想要真正的保护程序,还是建议用可编程类的芯片,安全性好,当前的环境下极难被破解。北京有一家公司在做,LKT4105也支持方式一和方式二,可以尝试一下
㈢ RSA和AES区别
先了解下AES和RSA的区别,前者属于 对称加密 ,后者属于 非对称加密 。
1、对称加密
对称加密就是加密和解密使用同一个密钥。
用数学公示表示就是:
▲加密:Ek(P) = C
▲解密:Dk(C) = P
这里E表示加密算法,D表示解密算法,P表示明文,C表示密文。
是不是看起来有点不太容易理解?看下图:
看过间谍局的知友们一定知道电台和密码本的功能。潜伏里面孙红雷通过电台收听到一堆数字,然后拿出密码本比对,找到数字对应的汉字,就明白上级传达的指令。而军统的监听台没有密码本,只看到一堆没有意义的数字,这就是对称算法的原理。
AES就属于对称加密 ,常见的对称加密方法还有DES、3DES、Blowfish、RC2以及国密的SM4。
2、非对称加密
对称加密快而且方便,但是有个缺点——密钥容易被偷或被破解。非对称加密就可以很好的避免这个问题。
非对称算法 把密钥分成两个 ,一个自己持有叫 私钥 ,另一个发给对方,还可以公开,叫 公钥 ,用公钥加密的数据只能用私钥解开。
▲加密: E公钥(P) = C
▲解密::D私钥(C) = P
这下就不用担心密钥被对方窃取或被破解了,私钥由自己保管。
非对称加密算法核心原理其实就是设计一个数学难题,使得用公钥和明文推导密文很容易,但根据公钥、明文和密文推导私钥极其难。
RSA 就属于非对称加密,非对称加密还有Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)以及国家商用密码SM2算法。
3、AES和RSA
AES和RSA都很安全,至少在目前的计算机体系结构下,没有任何有效的攻击方式。量子计算机时代,RSA有一定的破绽,因为利用shro's algorithm,量子计算机穷举计算质因子速度可以提高N个数量级,能够在有限的时间内破解RSA密钥。AES256至少目前并没有什么明显的漏洞。
AES作为对称加密技术,加密速度很快。 现在高端一点的CPU都带有AES-NI指令,可以极快的完成加密和解密。
举例来说,坚果云存储系统采用了intel 的AES-NI加速,在采用AES加密和解密的时候,
单核的性能可以超过 1GB Byte/秒,非常非常快,很适合对大量数据进行加解密。
但是AES作为对称加密技术,如何安全的分发密钥是一个难题。通过任何方式传递密钥都有泄密的风险。当然,目前我国高大上的量子通信技术或许能很好的解决这个问题。
RSA作为非对称加密技术的代表, 加解密的速度其实相当慢,只能对小块的数据进行加解密。但是其非对称的特点,满足公钥可以随处分发,只有公钥能解密私钥加密的数据,只有私钥能解密公钥加密的数据。所以很适合用来进行密钥分发和身份验证,这两个应用场景刚好相反。
1)用于对称秘钥分发的场景,其他人用公钥加密对称的秘钥,那么只有授权人才持有私钥,因此才能解密获得对应的秘钥,解决了AES密钥分发的难题;
2)对于身份验证的场景,授权人用私钥加密一段指令,其他人用公钥解密对应的数据,验证对应的指令与之前约定的某些特征一致(例如,这段话必须使用四川口音,像是坚果云CEO
的标准四川口音==),如果一致,那么可以确认这个指令就是授权人发出的。
相关趣闻轶事:
RSA除了是一个伟大的发明,被免费开放给所有互联网用户使用。它的发明者还以此成立了一家名为 RSA Security 的网络安全公司,这家公司最后被EMC高价收购。这是德艺双馨的伟大证明, 是“又红又专”的典范。
RSA的算法是以三个发明者的名字命名的,三位都是成功的数学家,科学家和企业家,其中的排名第一Ron Rivest,有非常多的杰出贡献。
RSA是整个互联网数据安全的基础,与光纤处于同样基础和重要的方式。 大部分的加密和解密的应用都是同时应用RSA和AES。
总结
破解加密的难度除了跟 加密方法 有关,还跟 密钥长度 以及 加密模式 有很大的关系,就拿AES来说,有AES128和AES256( 代表密钥长度 ),显然AES256的安全性能比AES128更高,而AES又要四种模式:ECB、CBC、CFB、OFB( 代表加密模式 )。
RSA1024是属于非对称加密,是基于大整数因式分解难度,也就是两个质数相乘很容易,但是找一个大数的质因子非常困难。量子计算机时代,RSA有一定的风险,具体可以参考: 超链接
AES256目前没有明显的漏洞,唯一的问题就是如何安全的分发密钥。
现在大部分的加密解密都是同时应用RSA和AES,发挥各自的优势,使用RSA进行密钥分发、协商,使用AES进行业务数据的加解密。
㈣ 对于加密的总结(AES,RSA)
跟第三方联调的时候会碰到各种加密算法,所以总结一下。
AES不是将拿到的明文一次性加密,而是分组加密,就是先将明文切分成长度相等的块,每块大小128bit,再对每一小块进行加密。那么问题就来了,并不是所有的原始明文串能被等分成128bit,例如原串大小200bit,那么第二个块只有72bit,所以就需要对第二个块进行填充处理,让第二个块的大小达到128bit。常见的填充模式有
不进行填充,要求原始加密串大小必须是128bit的整数倍;
假设块大小8字节,如果这个块跟8字节还差n个字节,那么就在原始块填充n,直到满8字节。例:块{1,2,3},跟8字节差了5个字节,那么补全后的结果{1,2,3,5,5,5,5,5}后面是五个5,块{1,2,3,..7}跟8字节差了1个字节,那么补全后就是{1,2,3,...,7,1},就是补了一个1。
如果恰好8字节又选择了PKCS5Padding填充方式呢?块{1,2,3...8}填充后变成{1,2,3...8,8...8},原串后面被补了8个8,这样做的原因是方便解密,只需要看最后一位就能算出原块的大小是多少。
跟PKCS5Padding的填充方式一样,不同的是,PKCS5Padding只是对8字节的进行填充,PKCS7Padding可以对1~256字节大小的block进行填充。openssl里aes的默认填充方式就是PKCS7Padding
AES有多种加密模式,包括:ECB,CBC,CTR,OCF,CFB,最常见的还是ECB和CBC模式。
最简单的一种加密模式,每个块进行独立加密,块与块之间加密互不影响,这样就能并行,效率高。
虽然这样加密很简单,但是不安全,如果两个块的明文一模一样,那么加密出来的东西也一模一样。
openssl的相关函数:
CBC模式中引入了一个新的概念,初始向量iv。iv的作用就是为了防止同样的明文块被加密成同样的内容。原理是第一个明文块跟初始向量做异或后加密,第二个块跟第一个密文块做异或再加密,依次类推,避免了同样的块被加密成同样的内容。
openssl相关函数:
敲黑板!! 所以跟第三方对接的时候,如果对面说他们用aes加密,务必对他们发起灵魂三问:
签名的作用是让接受方验证你传过去的数据没有被篡改;加密的作用是保证数据不被窃取。
原理:你有一个需要被验签的原串A。
步骤一:选择hash算法将A进行hash得到hash_a;
步骤二:将hash_a进行加密,得到加密值encrypt_a;
步骤三:将原串A和加密的encrypt_a发给第三方,第三方进行验签。第三方先解密encrypt_a,得到一个hash值hash_a1,然后对原串A使用同样的hash算法进行hash,得到的即为加密前的hash_a,如果hash_a = hash_a1, 那么验签成功。
rsa使用私钥对信息加密来做签名,使用公钥解密去验签。
openssl相关函数:
注意:两个函数中的m,是原串hash后的值,type表示生成m的算法,例如NID_sha256表示使用sha256对原串进行的hash,返回1为签名成功或者验签成功,-1位为失败。
再次敲黑板!! 所以如果第三方说使用rsa验签,要让对方告知他们的hash算法。
首先明确,私钥加密不等于签名。加密的时候,使用使用公钥加密,第三方使用你的私钥进行解密。
openssl里公钥加密函数为RSA_public_encrypt,私钥解密函数为RSA_private_decrypt,具体的可以自己去查看下官方文档。
rsa也涉及到了填充方式,所以对接的时候也要问清楚
在使用公钥进行加密时,会发现每次加密出的结果都不一样,但使用私钥加密时,每次的结果都一样,网上查了一圈,说是因为填充方式的原因。
官方文档说明:
那么为什么一定要使用私钥做签名,公钥做加密,而不是公钥做签名,私钥做加密呢?
举个栗子:
㈤ aes des rsa的加密算法有什么区别通俗简单讲,就是各个的优点和缺点,不要太深奥
aes/des加密速度快,适合大量数据,des容易破解,一般用3重des,后来又出现了更快更安全的aes
rsa是公钥加密,速度慢,只能处理少量数据,优点是公钥即使在不安全的网络上公开,也能保证安全
常见情况是双方用rsa协商出一个密钥后通过aes/3des给数据加密
㈥ AES和RSA是什么关系和MD5又有什么关系
AES和RSA都是加密算法
AES属于对称加密算法
RSA属于非对称加密算法,公钥和私钥不一致
MD5是一种校验方式,用于保证文件的正确性,防止被植入木马或病毒