zoukankan      html  css  js  c++  java
  • 《图解密码技术》[01] 密码概述


    “图解密码技术”的图片搜索结果
    《图解密码技术》(点击查看详情


    1、写在前面的话

    因为接触了微信公众号开发,之中涉及支付功能时用到了大量签名加密之类的东西,对于密码安全这一块,其实一直不是很明白,大部分方法自己在用到时也是去直接google,然后复制粘贴,可以说完全不知其所以然。

    加密这一块查了下有很多人推荐这本书,于是就决定看看。我个人涉及到真正的加密技术的实际应用可能不算那么多,所以这里笔记准备记录一些浅显和核心的东西。



    2、加密和解密

    发送信息和接受信息的过程中,因为传递过程涉及多方,可能会存在窃听者。就像你给别人写了一封信,在寄出的途中,如果有人恶意想要偷窥信件的内容,是完全可能的,比如邮递员。

    如果不想让别人看到明确的信息,就要对信息进行加密,接收者进行解密,这样就算中途被人看到信息,他也看不明白信息的内容。

    加密之前的消息称为“明文”,即明白的谁都看得懂的信息,加密之后的消息则称为“密文”。
      

    接收者还原密文称之为“解密”,如果是第三方试图还原,则称之为“破译”。 
     
    另外,密码安全涉及的信息方面很广,主要在机密性、完整性、认证和不可否认性上做文章。而相应的,也就诞生了用来应对的密码技术:
     


    3、隐写术和数字水印

    密码主要是一种能够让消息内容变得无法解读的技术。除此之外,还有另外一种技术,不是将消息内容变得无法解读,而是能够隐藏信息,这种技术叫做隐写术。

    隐写术的第一个典型就是大家都知道的藏头诗:
    我画蓝江水悠悠, 
    爱晚亭上枫叶愁。
    秋月溶溶照佛寺,
    香烟袅袅绕经楼。
    “唐伯虎点秋香”的图片搜索结果

    隐写术在计算机中的应用,数字水印就是其中的一种,将著作权拥有者及购买者的信息嵌入文件中的技术,但仅凭数字水印技术是无法对信息进行保密的,因此需要和其他技术配合使用。

    比如将密码和隐写术结合使用,将明文加密后通过隐写术隐藏到图片中,这样即便有人发现了密文的存在,也无法读取内容。密码隐藏的是消息内容,隐写书隐藏的是消息本身



    4、历史上的密码

    4.1 恺撒密码

    假设我们要保密的信息为 yoshiko 这个女性的名字,我们将每个字母按字母表顺序向后平移3位并转换为大写字母,即:
    • y --> B
    • o --> R
    • s --> V
    • h --> K
    • i --> L
    • k --> N
    • o --> R

    于是,yoshiko 经过加密就变成了 BRVKLNR 。在这里,将字母平移n位替换,就是密码的算法,这里平移的数量n就是密钥,这种加密叫做恺撒密码

    当然,解密的话,接收者也要知道密钥,即这里是3,反向平移即可得到明文。如果是第三方想要破解该密文,因为字母表只有26个字母,所以密钥实际上也只有0到25共26种,破译者只要从0到25挨个尝试密钥破解,总会得到明文。这种方法称之为暴力破解,也称之为穷举搜索

    4.2 简单替换密码

    恺撒密码实际上也是简单替换密码的一种,因为其本质就是字母的替换,但是因为替换的规则是确定的,所以更为简单。

    字母之间一对一的对应替换,则是简单替换密码,例如:
     
    当然,简单替换密码的解密就必须要依赖替换表了,所以发送者和接收者都必须同时拥有替换表,而这份替换表也就相当于简单替换密码的密钥。

    另外,一个密码能够使用的“所有密钥的集合”称之为密钥空间,密钥空间越大,暴力破解就越困难。简单替换密码中,每个字母可以随意对应字母表中无匹配的任意一个,所以实际上密钥空间为 36*25*...*2*1 = 403291461126605635584000000;而凯撒密码只有0-25共26种,所以简单替换密码更难通过暴力破解来破译,但是,使用“频率分析”的密码破译方法,则能够破译简单替换密码。(频率分析的破译方法在书中有详细例子page27,很有意思,这里不再展开)



    5、加密算法和密钥

    凯撒密码:
    • 加密算法:将明文中的各个字母按照指定的字母数平移
    • 密钥:平移的字母数量

    简单替换密码:
    • 加密算法:按照替换表对字母表进行替换
    • 密钥:替换表

    不难看出,加密算法是固定的,密钥是可变的。因为如果每次加密都必须完全产生新的加密算法,那太麻烦了,于是我们喜欢加密算法可以重复使用,但是随着重复使用的次数其破译可能性也逐渐增大,所以准备了可变的部分,即密钥。所以加密算法和密钥分开考虑,就解决了加密算法希望得到重复利用,但重复使用会增加风险这个难题。


  • 相关阅读:
    sql 时间函数大全
    JavaScript代码收集
    inno setup打包.netframework
    Mono for Android 安装配置方法 附破解版
    恢复Reflector反编译后资源文件的办法
    sql时间格式转换
    函数式编程
    获取Java程序运行的路径 | 获取当前jar包的路径
    CIPAddressCtrl类的使用(IP地址与CString的互相转化)
    java的System.getProperty()方法可以获取的值
  • 原文地址:https://www.cnblogs.com/deng-cc/p/7532874.html
Copyright © 2011-2022 走看看