一.什么是编码??

计算机的操作对象并不是文字,而是由0和1排列而成的比特序列。无论是文字,图像,还是程序,都是由比特序列来表示的。加密就是将表示明文的比特序列转换为表示密文的比特序列。

二.XOR运算

XOR全称为exclusiveor,中文叫异或
举例:
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
符号为⊕
大家可以总结出一条规律:
两个相同的数进行XOR运算的结果一定为0.
0 ⊕ 0 = 0
1 ⊕ 1 = 0
则我们可以计算了:
00110011⊕01010101=
— 00110011
⊕ 01010101
————————
-----01100110
00110011⊕01010101=01100110
则解密:
01100110 ⊕ B
即01100110 ⊕ 01010101 =00110011—A

用VBScript语言编写用XOR加密:

k = InputBox(“请输入密钥”)
key = CInt (k)
text1 = InputBox(“请输入明文或密文”)
text2 = “”
For i = 1 To Len(text1)
letter = Mid(text1, i, 1)
text2 = text2 & Chr(Asc(letter) Xor key)
Next
MsgBox text2

运行效果如图:


三.一次性密码本(one-time pad )。

它的原理是“将明文与一串随机的比特序列进行XOR运算。”
列如,明文为10010010001,用随机数产生密钥,如01110011010,加密为111110001011。
解密方法:
即加密的反向运算。用明文和密钥进行XOR运算,就可以得到明文。
111110001011 ⊕ 01110011010 =10010010001

一次性密码本是由维纳(G.S.Vernam)于1917年提出的,并获得了专利,因此也被称为维纳密码(Vernam cipher)

四.一次性密码本是无法破译的。

一次性密码本是一种非常简单的密码。如此简单的密码居然无法破译???其实,这里说的无法破译,并不是指在单位时间内难以破译,而是指即使可以一瞬间尝试所有的密钥,也无法破译。
你肯定要问了,为何呢,其实,在上述的例子中,我们用一个编码进行加密,即使可以一瞬间尝试所有的密钥,也无法判断哪个是正确的明文
在破译的过程中,可能会出现其他的疑似明文。列如:“334”,"¥@6(::。+¥$$"等明文,由于明文中所有可能的排列组合都会出现,因此我们无法判断其中哪一个才是正确的明文(也就是说哪一个密钥才能够正确解密)。
因此,一次性密码本是无法破译的!!!!

经香农(C.E.Shannon)在1949年用数学证明:一次性密码本是无条件安全的,理论上是无法破译的

五.为何很少有人使用一次性密码本?(或一次性密码本有什么缺点?)

1.密钥配送问题
最大的问题在于密匙的配送!!!
当B收到了来自A的密文,想要解密时,就必须知道密钥,因此密钥也应该配送过去,且密钥的长度和密文相等。但这产生了一个矛盾-------如果能够安全的发送密钥,难道不能安全的发送明文吗???

2.密钥的保存
如果有有能安全保护密钥的方法,不就能安全的保护明文了吗???也就是说,一开始我们就不需要密码。
我们只是将“保护明文”这一命题替换成了“保护和明文一样长的密钥”而已,问题没有得到实质性的解决!!!!!

3.密钥的重用
在一次性密码本中,绝不能重用过去用过的密钥,否则密钥一旦泄露,过去所有的机密通信将全部被解密!!!!!

4.密钥的同步
当密文很长时,一次性密码本的密钥长度也会随之变长!!!(明文为1G的大小,则密钥的大小也为1G.)如果发送者和接受者的密钥的比特序列有错位的话,所有信息都将无法解密!!!!!

5.密钥的生成
在一次性密码本中,需要生成大量的随机数。这里的随机数不是通过计算机生成的伪随机数,而必须是无重现性的真正的随机数!!!!!

出于上述原因,能够使用一次性密码本的,只有那些机密性重过一切,且可以花费大量财力和物力来生成密钥并配送密钥的场合。
列如,据说大国之间就使用了一次性密码本,这种情况下,估计会有专门的特工来承担配送密钥的任务,也就是说,特工需要配送密钥,并把它直接交到对方手中。

所以,一次性密码本是一种不可靠的密码!!!!!!

下节课我们来讲DES加密!!!

密码学第三讲——对称密码(XOR与一次性密码本)相关推荐

  1. 《图解密码技术》笔记3:对称密码(共享密钥密码)-用相同的密钥进行加密和解密

    目录 3.1 炒鸡蛋与对称密码 3.2 本章学习主要内容 3.3 从文字密码到比特序列密码 3.3.1 编码 3.3.2 XOR(异或) 3.4 一次性密码本–绝对不会被破译的密码 3.4.4 一次性 ...

  2. 密码学入门:几种简单的密码

    密码学入门:几种简单的密码 一.维吉尼亚密码       维吉尼亚密码引入了"密钥"的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计.假如以上面第一行代表明文字 ...

  3. 使用一次性密码解决方案更安全地验证身份

    转自: http://msdn.microsoft.com/zh-cn/magazine/cc507635.aspx 安全性 使用一次性密码解决方案更安全地验证身份 Dan Griffin 代码下载位 ...

  4. [信息安全] 4.一次性密码 amp;amp;amp;amp; 身份认证三要素

    在信息安全领域,一般把Cryptography称为密码,而把Password称为口令.日常用户的认知中,以及我们开发人员沟通过程中,绝大多数被称作密码的东西其实都是Password(口令),而不是真正 ...

  5. 使用一次性密码本通过 SSH 安全登录 Linux

    在考虑 SSH 认证方案时,大家普遍认为公钥认证比密码认证更安全.然而,公钥认证技术并不是为公共环境设置的,如果你在一台公用电脑上使用公钥认证登录 SSH 服务器,你的服务器已经毫无安全可言了,公用的 ...

  6. java利用TOTP算法动态生成一次性密码

    一.HOTP   HOTP 算法,全称是"An HMAC-Based One-Time Password Algorithm",是一种基于事件计数的一次性密码生成算法,详细的算法介 ...

  7. linux 动态密码,LINUX使用一次性密码配置

    LINUX使用一次性密码配置 密码根本就是一次性的, 随你便Sniffer, 吸到了也没有, 已经失效了. wget tar zxvf otpw-1.3.tar.gz cd otpw make 好, ...

  8. 认证性 不可否认性_一次性密码不提供不可否认性

    认证性 不可否认性 标题很明显,它可能是推文,而不是博客文章. 但让我扩展. OTP或一次性密码曾经是在线银行的主流. 您将获得一个专用的设备,该设备会生成一个6位数的代码,您将该代码输入到网上银行中 ...

  9. 关于Google身份验证器、基于时间的一次性密码 (TOTP)算法的初步了解

    一.Google Authenticator 1.概述 Google Authenticator是基于双因素身份验证 ( 2FA ) 的应用程序,有助于识别用户身份并确认用户声称自己是谁以及他是否真的 ...

最新文章

  1. CCAI2018演讲实录 | 蒲慕明:脑科学与类脑机器学习
  2. FPGA笔试题解析(三)
  3. 36个创意广告海报欣赏
  4. spark中local模式与cluster模式使用场景_Spark-Submit 和 K8S Operation For Spark
  5. 在servlet中读取初始化参数和上下文参数的方法getServletContext()和getInitParameter()
  6. Android之6.0 权限申请封装
  7. 有偿数据收集 | 哈工大手写作文图片收集
  8. linux kong_当Linux是善良的面Kong
  9. nginx中文url php,使Nginx服务器支持中文URL的相关配置详解
  10. LeetCode刷题(47)--Gray Code
  11. 移动端双Token免登录(附代码)
  12. php网页表格样式,HTML的表格样式
  13. MYSQL下载及安装完整教程
  14. JDK的下载及其安装
  15. 图像处理笔记——边缘检测算子
  16. 最详细G1垃圾回收器日志解读
  17. Eclipse插件安装(在线和离线方式)
  18. PNP+NMOS用于充电的原理解释
  19. 【原创】新韭菜日记55--20190412----各行业龙头股
  20. 回归分析在计算机中的应用,应用回归分析(何晓群)学习笔记

热门文章

  1. Service not registered
  2. CAD明细表转EXCEL
  3. Anaconda环境下安装opencv
  4. Linux下快速删除大量文件/文件夹方法--rsync
  5. 中国软件欧美出口工程名单:金蝶等入选第一梯队
  6. 基于web的家电维修系统/家电维修管理系统
  7. 【TOP期刊推荐】JCR1区网络计算类重点SCI期刊征稿中~
  8. 【Linux】Linux基础知识(Linux模块)
  9. 计算机中扩展名在哪里更改,什么是文件扩展名?Win10如何修改文件扩展名?
  10. OpenCV face_detector人脸识别报错