Swift Feistel Cipher
我完全用 Swift 实现的 Feistel 密码尝试
背景
"在密码学中,Feistel 密码是一种对称结构,用于构造分组密码,以德国出生的物理学家和密码学家霍斯特·费斯特尔的名字命名,他在美国 IBM 公司工作时进行了开创性的研究;它也通常称为 Feistel 网络。相当多的分组密码使用此方案,包括数据加密标准(DES)。Feistel 结构的优点是加密和解密操作非常相似,甚至在某些情况下是相同的,只需要反转密钥调度。因此,实现此类密码所需的代码或电路大小将几乎减半。"(维基百科)
安装
- 在 podfile 中添加
pod 'Feistel'
用法
- 使用
shared
属性创建一个Feistel
对象。let fest = Feistel.shared
- 设置您希望用于加密和解密的轮数。默认为
5
。fest.passes = 10
- 可选地设置您想用于加密和解密的输入密钥。
fest.inputKeys = ["key1", "key2", "key3", "key4"]
- 注意:设置输入密钥时,轮数将设置为输入密钥的数量
- 创建您想要加密的
Data
对象。let data = "super duper awesome test".data(using: .utf8)
- 加密
let encrypted = fest.encrypt(data: data)
- 解密(使用已加密的数据)
let decrypt = fest.decrypt(data: encrypted)
- 密钥在每个实例会话中是唯一的。您可以通过调用以下代码来检索加密中使用的密钥:
fest.keys()
资源
- Feistel Cipher - Computerphile: https://www.youtube.com/watch?v=FGhj3CGxl8I
- Feistel cipher - https://en.wikipedia.org/wiki/Feistel_cipher