开放API接口安全(1)---常用加密算法

一、对称加密

在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

美国国家标准局倡导的AES即将作为新标准取代DES。

常见的对称加密算法:DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法、ECB、CBC、CFB。

优缺点:

优点:算法公开、计算量小、加密速度快、加密效率高。

缺点:双方都使用同样钥匙,如果一方泄露了秘钥整个通信就会被破解,加密信息就不再安全了,安全性得不到保证。

二、非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

常见的非对称加密算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)、MD5(加盐加密)。

相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。

三、哈希算法

哈希算法又叫散列算法,是将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。它的原理其实很简单,就是把一段交易信息转换成一个固定长度的字符串。不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。哈希(Hash)算法,它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,根据提供的引用内容,我无法直接回答你的问题。El-Gammal加密算法是一种公钥加密算法,而CCA1是一种密码分析模型,两者并没有直接的联系。如果你能提供更多关于你问题的背景信息或者引用内容,我将会尽力为你解答。同时,我也可以为你介绍一下El-Gammal加密算法的基本原理和实现方法。 El-Gammal加密算法是一种基于离散对数问题的公钥加密算法,其基本原理是利用离散对数问题的困难性来保证加密安全性。该算法加密过程如下: 1. 选择一个大素数p和一个原根g,其中p和(g,p)应该是困难离散对数问题的实例。 2. 随机选择一个私钥a,计算出公钥h=g^a mod p。 3. 将明文m转换为整数M,然后随机选择一个k,计算出c1=g^k mod p,c2=M*h^k mod p。 4. 将密文(c1,c2)发送给接收方。 解密过程如下: 1. 接收方收到密文(c1,c2)后,计算出h^(-a) mod p。 2. 计算出M=c2*(c1^(-a)) mod p。 下面是一个El-Gammal加密算法的Python实现: ```python import random def is_prime(n): if n <= 1: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True def gcd(a, b): if b == 0: return a return gcd(b, a % b) def mod_inv(a, m): def ext_gcd(a, b): if b == 0: return (a, 1, 0) else: d, x, y = ext_gcd(b, a % b) return (d, y, x - (a // b) * y) d, x, y = ext_gcd(a, m) if d != 1: raise ValueError("modular inverse does not exist") return x % m def elgamal_keygen(): p = random.randint(2 ** 511, 2 ** 512 - 1) while not is_prime(p): p = random.randint(2 ** 511, 2 ** 512 - 1) g = random.randint(2, p - 1) a = random.randint(2, p - 2) h = pow(g, a, p) return (p, g, h, a) def elgamal_encrypt(p, g, h, M): k = random.randint(2, p - 2) c1 = pow(g, k, p) c2 = (M * pow(h, k, p)) % p return (c1, c2) def elgamal_decrypt(p, a, c1, c2): M = (c2 * mod_inv(pow(c1, a, p), p)) % p return M ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值