密码学仿射密码

密码学仿射密码

1、密钥空间的计算

1) 密钥空间的定义:

K= {(a,b}∈Zm * Zm : gcd(a,m)=1}

gcd(a,m)=1:a与m最大公约数是1,两个数互素

在Douglas R. Stinson 的《密码学原理与实践》(第3版)中给出了如上定义,但是落实到具体题目仍然很难计算出密钥空间的大小。

2)密钥空间的计算

K = ф(m) * m

m可分解为素数幂的乘积的形式

如m=60时 60 = 2 * 30 = 2 * 2 * 15 = 2² * 3 * 5(这里的素数要求互不相同,遇到相同的写成幂的形式)

ф(60) = (2² - 2^1) * (3^1 - 3^0) * (5^1 - 5^0) = 2 * 2 * 4 = 16 (^代表次方)

k = 16 * 60 = 960

再来一道 m = 26时 26 = 2 * 13

ф(26) = (2 - 1) * (13 - 1) = 12(1代表的是他们的0次方)

k = 12 * 26 = 312

这里仅对计算方式进行讲解,原理的讲解请自行搜索

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经典密码学中的仿射密码是一种替换密码,它使用了一种线性变换的方法对明文进行加密。下面是一个简单的仿射密码的加密和解密的Python代码示例: ```python def affine_encrypt(plain_text, key): encrypted_text = "" for char in plain_text: if char.isalpha(): if char.isupper(): encrypted_text += chr((ord(char) - 65) * key[0] + key[1] % 26 + 65) else: encrypted_text += chr((ord(char) - 97) * key[0] + key[1] % 26 + 97) else: encrypted_text += char return encrypted_text def affine_decrypt(cipher_text, key): decrypted_text = "" for char in cipher_text: if char.isalpha(): if char.isupper(): decrypted_text += chr(((ord(char) - 65 - key[1]) * mod_inverse(key[0], 26)) % 26 + 65) else: decrypted_text += chr(((ord(char) - 97 - key[1]) * mod_inverse(key[0], 26)) % 26 + 97) else: decrypted_text += char return decrypted_text def mod_inverse(a, m): for x in range(1, m): if (a * x) % m == 1: return x return -1 # 示例使用 plain_text = "Hello, World!" key = (5, 8) # 仿射密码密钥,其中key[0]为乘法因子,key[1]为加法因子 encrypted_text = affine_encrypt(plain_text, key) decrypted_text = affine_decrypt(encrypted_text, key) print("明文:", plain_text) print("加密后:", encrypted_text) print("解密后:", decrypted_text) ``` 请注意,上述代码仅为示例,实际使用中需要考虑更多的安全性和错误处理。另外,仿射密码是一种较为简单的密码法,现代密码学中已经有更加安全的替代法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值