密码学:维吉尼亚密码原理、加密(python实现示例)

原理:

维吉尼亚密码:是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。

维吉尼亚密码的基本工作原理如下:

  1. 加密前,需要有一个关键词(key),这个关键词会被重复或扩展至与明文长度相同。
  2. 明文和扩展后的关键词按字符对应相加(这里所说的“加”是指在字母表上按照一个固定长度进行循环移位,类似于凯撒密码的操作)。
  3. 每一对字符相加的过程实质上是对字母表上的位置进行逐个异或(或者说是模26加法,对于26字母的英语字母表而言)。
  4. 结果就是得到的密文。

举例来说,如果关键词是"KEY",则对应的数字化密钥k=(10, 4, 24),待加密明文是"HELLO",首先把明文字母转换为数字,然后把明文字母每3个一组,使用密钥字进行模26下的加密操作。

则加密过程是:

  • H(7) + K(10) = R(17)
  • E (4)+ E(4) = I(8)
  • L (11)+ Y(24) = J(9)
  • L (11)+ K(10) = V(21)
  • O(14) + E (4)= S(18)

所以,密文就是"RIJVS"。

加密

def weiji(ming, key):
    strlen1 = len(ming)
    strlen2 = len(key)
    mi = ""
    for i in range(strlen1):
        j = i % strlen2
        k = ord(ming[i]) + ord(key[j])    # 取明文与密钥相加后的值
        # 排除空格
        if ming[i] == ' ':
            mi += ' '
            i += 1
        # 小写字母加密
        elif 'a' <= ming[i] <= 'z':
            mi += chr((k - 194) % 26 + 65)  
        # 大写字母加密
        elif 'A' <= ming[i] <= 'Z':
            mi += chr((k - 130) % 26 + 65)
    return mi


Ming = input('请输入明文:')
Key = input('请输入密钥:')
print(weiji(Ming, Key))

结果:

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值