在电脑科学的领域里,每一刻都有数以万计的资料在进行传输,在传输的过程中,是真的安全吗?相信每个人都有遇过诈骗电话,或是资料外泄,是怎麽样的过程造成资料不安全?今天开始来讨论安全性演算法的必要性。
「传送」资料的这个动作,本身就有许多漏洞,很难防着有心人士的攻击,也是因为如此,才衍生出各式各样「保护」资料的方式。我们先来看看,资料在「传送」的过程中会遇到哪些问题:
数据传输有许多风险,若要进一步了解数据传输的原理,可以参考「OSI模型」。接下来几天,会针对不同的安全性演算法进行探讨。
杂凑可用於密码加密,使用杂凑函数将资料转换成位址,接着将资料储存在该位址上,不需要使用比较进行搜寻,可以很快的时间找到资料。
杂凑函数要能够减少碰撞(Collision),所谓的碰撞,也就是将不同的资料转换到相同的位址。如果发生碰撞就要启动碰撞处理机制,若所有资料经过杂凑函数都没有发生碰撞,则称为完美杂凑(Perfect Hashing)。
下列是常见的杂凑函式:
采用不同杂凑函数时,一些参考因素:
class Hashtable:
def __init__(self, size):
self.data = [None for i in range(size)]
self.M = size
def hash(self, key):
return key % self.M
def insert(self, key):
address = self.hash(key)
if self.data[address] == None:
self.data[address] = key
else:
while self.data[address] != None:
address = (address + 1) % self.M
self.data[address] = key
def isExist(self, key):
address = self.hash(key)
start = address
if self.data[address] == key:
return True
else:
while self.data[address] != key:
address = (address + 1) % self.M
if address == start or self.data[address] == None:
return False
return True
def search(self, key):
address = self.hash(key)
if self.isExist(key):
while self.data[address] != key:
address = (address + 1) % self.M
return address
else:
return None
def v(self):
print(self.data)
h = Hashtable(8)
n = int(input())
for i in range(n):
h.insert(int(input()))
h.v()
print(h.search(1))
print(h.search(2))
参考资料:资料结构:使用Python
两个不同资料经过杂凑函式转换到相同位址,称作碰撞(Collision)。
<<: Day 5: LeetCode 88. Merge Sorted Array
添加 OkHttp 依赖库 要使用 OkHttp,必须在 gradle (Module) 层级的 d...
今天我们来测试看看 JavaScript 框架库 – jQuery,当我们引用 jQuery如果需要...
SSL 安全通讯协定 (Secure Socket Layer)和 TLS 传输层安全性协定 (Tr...
k8s只是一个平台,要发挥他的价值就要让适合的服务运行在上面,所以从今天开始就会介绍一些有趣的服务(...
每天都在思考, 如果事情自己会做好就好了, 程序自己会自动检查就好了, 今天C#也有自动检查变数是否...