今天头疼了一下午心情非常不美好,所以什么都不想干,找点好玩的RSA加密嘻嘻嘻。。。就找到了一个视频
HASH算法:
特点:对于相同的数据加密结果是一样的,不同的数据加密的长度是一样的,没有办法进行逆运算。
也被称为数据指纹。
通过散列碰撞解密,
企业级的开发中:用户密码服务器保存的是密码的HASH值。这个老师讲的不太好,用户密码加严,
可以对每一个用户加一个随机key然后再加密,有一个随机hash算法是hmac,对每一个密码都有一个key进行加密
用户注册账号密码客户端会把密码转换成hash值然后上传服务器,服务器保存,在传递的过程中账号和hash值,
黑客可以抓包拦截数据包,呃,30分钟的视频20分钟没有说到说好的RSA加密算法,行吧,还是自己看吧
费马小定理:假设a是一个整数,p是一个素数,a的p次方减去a一定是p的倍数,验证方式杨辉三角。
RSA算法是一个关于素数的应用,
欧拉φ函数又称为欧拉总计函数,φ(n)其中n是正整数,φ(n)表示在小于或者等于n的正整数当中,与n互素的数的个数。
互素也叫互质,如果两个整数的最大公约数是1则称为它们互素。如果n是一个素数,那么φ(n)=n-1,是这个函数的一个基本性质。
用python 实现一下吧
class RSA:
"""
RSA加密算法
"""
def __init__(self):
self.__create_key()
pass
def rsa_encrypt(self, plain_text):
# 加密 plain_text < n
return self.__quick_pow_mod(plain_text, self.__e, self.__n)
def rsa_decrypt(self, cipher_text):
# 解密
return self.__quick_pow_mod(cipher_text, self.__d, self.__n)
@staticmethod
def __create_prime_list():
l = list(range(2, 10000))
for n, i in enumerate(l):
for j in l[n + 1:]:
if j % i == 0:
l.remove(j)
return l
def get_public_key(self):
return "自动生成公钥对:{%d, %d}" % (self.__e, self.__n)
def get_private_key(self):
return "自动生成私钥对:{%d, %d}" % (self.__d, self.__n)
def __gcd_x_y(self, x, y):
if y == 0:
return x
else:
return self.__gcd_x_y(y, x % y)
@staticmethod
def __quick_pow_mod(a, b, c):
ans = 1
a = a % c
while b != 0:
if b & 1:
ans = (ans * a) % c
b >>= 1
a = (a * a) % c
return ans
def __create_key(self):
prime_list = self.__create_prime_list()
import random
# 得到两个素数
p = prime_list[random.randint(0, len(prime_list) - 1)]
q = prime_list[random.randint(0, len(prime_list) - 1)]
self.__fanN = (p - 1) * (q - 1)
while True:
self.__e = random.randint(2, self.__fanN)
if self.__gcd_x_y(self.__e, self.__fanN) == 1:
break
for i in range(self.__fanN):
if i * self.__e % self.__fanN == 1:
self.__d = i
break
self.__n = q * p
# 得到公钥{e, n} 私钥{d, n}
if __name__ == "__main__":
rsa = RSA()
print(rsa.get_public_key())
print(rsa.get_private_key())
plain_text = int(input("请输入要加密的明文:"))
cipher = rsa.rsa_encrypt(plain_text)
print("%d 经过加密后为:%d" % (plain_text, cipher))
print("%d 经过解密后为:%d" % (cipher, rsa.rsa_decrypt(cipher)))
有点丑,大概就是这个意思吧。。。。
来源:oschina
链接:https://my.oschina.net/u/4273739/blog/3562183