前一天提到的Hybrid Cryptosystem,其中使用到的「key」会进行封装,避免被有心人士撷取将加密後的讯息解密。其中用得到的方法就是今天会提到的迪菲-赫尔曼金钥交换(Diffie-Hellman Key Exchange)。
名称虽然为Key Exchange,但意思是产生金钥。
迪菲-赫尔曼金钥交换是在两方之间安全交换金钥的方法,「混合运算」双方共享的秘密数和公开数後,就能安全地交换双方的共同金钥。方法是用质数P、生成元G、和G的x次方mod P来求出X的问题,称为「离散对数问题」(discrete logarithm problem),目前尚未找到有效率的解法。
不过我们先来看看Diffie-Hellman的运算方式:
资料来源:Wiki
class DH_Endpoint(object):
def __init__(self, public_key1, public_key2, private_key):
self.public_key1 = public_key1
self.public_key2 = public_key2
self.private_key = private_key
self.full_key = None
def generate_partial_key(self):
partial_key = self.public_key1**self.private_key
partial_key = partial_key%self.public_key2
return partial_key
def generate_full_key(self, partial_key_r):
full_key = partial_key_r**self.private_key
full_key = full_key%self.public_key2
self.full_key = full_key
return full_key
def encrypt_message(self, message):
encrypted_message = ""
key = self.full_key
for c in message:
encrypted_message += chr(ord(c)+key)
return encrypted_message
def decrypt_message(self, encrypted_message):
decrypted_message = ""
key = self.full_key
for c in encrypted_message:
decrypted_message += chr(ord(c)-key)
return decrypted_message
message="This is a very secret message!!!"
s_public=197
s_private=199
m_public=151
m_private=157
Sadat = DH_Endpoint(s_public, m_public, s_private)
Michael = DH_Endpoint(s_public, m_public, m_private)
参考资料:Diffie-Hellman Key Exchange explained (Python)
前言 本章节,将会介绍本系列文章的实验操作环境以及一些设定与建置的步骤。 实验操作环境介绍 实验操作...
AutoML得到的结果,说明如下。见图<AZ-exp4MNIST.png> 当看到 [S...
表单标签主要功用是用来收集使用者资料 常用情况 : 注册页面... 主要由 表单域、表单元素、提示文...
Chap.II Machine Learning 机器学习 https://yourfreetemp...
转换操作符 map/mapError map操作符会执行给定的闭包,将上游发布的内容进行转换,然後再...