zoukankan      html  css  js  c++  java
  • 密码学概述

    一、密码学的起源与发展

    密码学英文名称为Cryptography,密码学最为一门学科,是最近几十年开始迅速被人们重视和发展起来的。密码学往往与信息安全四个字精密的联系着。最早的密码学的”始祖”可以说是早在公元前几百年就已经出现了,当然,当时不会出现像现在这么复杂的安全体系。但是为了避免纯明文式的信息暴露,会有一个字符映射规则,本身的一个字符用另外一个字符代替,只有发送接收方都知道这样的规则,才能明白信息真正的含义,这在上世纪的战争时的信息传输时也被拿来经常使用。但是这样的安全策略是非常脆弱的,一旦规则被人破解掌握,也就意味着信息的完全暴露。

    直到上世纪左右,随着计算机信息产业的飞速发展,密码学也逐渐演变为一门专有的学科,也发展起来了,从最简单的单向加密,到对称加密算法,SHA,RSA,数字签名等等算法的出现,密码学这门学科才变得越来越百花齐放了。但是魔高一尺,道高一丈,人们对于数据的安全性提出了越来越高的要求,这也促使着人们对于当前已有的加密算法的不断改进和发展。

    二、密码学的常用标语

    密钥:分为加密密钥和解密密钥

    明文:没有进行加密,直接代表原文含义的信息

    密文:经过明文加密操作,隐藏了原文代表的信息

    加密:将明文转化为密文的过程

    解密:将密文转化为明文的过程

    密码算法:在加密和解密中会用到的算法操作。

    三、现代密码学的常用算法

    (1)、Base64算法。这个其实并不太算是加密算法系类的,他只是采用了一套规则,将明文中的字符进行了一个转码,在邮件的传输中用的比较多。这个算法的目的就是避免了明文的直接暴露。只要掌握了base64算法的转换规则,也是可以非常轻易的破解里面的明文的。

    (2)、MD系列算法。俗称Message Digest,消息摘要算法系列,目的就是为了验证数据的完整性时使用的。他是一种单向加密算法。该系列算法从最早的MD2到现在用的最常见的Md5,经历了多个算法版本的演变。MD5的应用除了可以应用在一致性的验证上,还可以用在数字证书和安全访问认证中。后来为了克服MD系列算法后的位数不够的问题,就有了后来的SHA,安全哈希算法,同样是一种消息摘要的算法,也是单向加密算法。下面是一段java实现的MD5算法:

    public static String GetMD5Code(String strObj) {
            String resultString = null;
            try {
                resultString = new String(strObj);
                MessageDigest md = MessageDigest.getInstance("MD5");
                // md.digest() 该函数返回值为存放哈希值结果的byte数组
                resultString = byteToString(md.digest(strObj.getBytes()));
            } catch (NoSuchAlgorithmException ex) {
                ex.printStackTrace();
            }
            return resultString;
        }


    (3)、DES对称密钥加密算法。DES全程Data Encryption Standard,数据加密标准。DES比上面的MD系列算法在安全和使用的级别上又上升了一个层次。为什么叫做对称密钥加密算法,因为在加解密的过程中,共用了相同的key。也就是说,在加密的过程中我用这个key当做参数进行加密,然后我在解密的过程中还是用这个key做参数进行解密,所以这个key的安全性就显得非常重要。只能让发收双方保有这个keyDES算法整体上的安全性还是非常高的,后来,为了克服DES密钥空间小的问题,又出现了三重DES算法。下面是一段DES算法的java实现:

    public byte[] desCrypto(byte[] datasource, String password) {            
                    try{
                    SecureRandom random = new SecureRandom();
                    DESKeySpec desKey = new DESKeySpec(password.getBytes());
                    //创建一个密匙工厂,然后用它把DESKeySpec转换成
                    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
                    SecretKey securekey = keyFactory.generateSecret(desKey);
                    //Cipher对象实际完成加密操作
                    Cipher cipher = Cipher.getInstance("DES");
                    //用密匙初始化Cipher对象
                    cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
                    //现在,获取数据并加密
                    //正式执行加密操作
                    return cipher.doFinal(datasource);
                    }catch(Throwable e){
                            e.printStackTrace();
                    }
                    return null;
            }

    对应的解密过程:

    private byte[] decrypt(byte[] src, String password) throws Exception {
                    // DES算法要求有一个可信任的随机数源
                    SecureRandom random = new SecureRandom();
                    // 创建一个DESKeySpec对象
                    DESKeySpec desKey = new DESKeySpec(password.getBytes());
                    // 创建一个密匙工厂
                    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
                    // 将DESKeySpec对象转换成SecretKey对象
                    SecretKey securekey = keyFactory.generateSecret(desKey);
                    // Cipher对象实际完成解密操作
                    Cipher cipher = Cipher.getInstance("DES");
                    // 用密匙初始化Cipher对象
                    cipher.init(Cipher.DECRYPT_MODE, securekey, random);
                    // 真正开始解密操作
                    return cipher.doFinal(src);
            }

    (4)、RSA非对称加密算法。这个算法在当前也用的非常的广。RSA算法的名称得来比较有意思,因为他是由3个人研发出来的,所以就以那3个人的名字的首字母拼凑而成。RSA是目前为止最有效的公钥加密算法,可以抵挡住绝大部分的密码攻击。在RSA的算法原理中,他提供了一个公钥和私钥的机制,公钥是暴露的,私钥又各自双方保留。对应的加解密过程为,一方用公钥进行加密,另一方就用自己的私钥进行解密。反之也是如此。RSA算法的安全性依赖于大数的分解。

    四、未来密码学的发展与前景

    未来密码学还会在更多的方面发挥着更为重要的作用,而且密码学作为一门学科,将不会仅仅是在于加密,解密算法的研究上,在其中会有更细致的领域。包括一些安全协议的设计,或者说与数学知识相关的加密算法技术都会成为新的发展方向。密码学还存在着很多的创新点,但是同样的,密码学面临的挑战也是存在的,在安全领域所面临的挑战也同样会越来越大。

  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184077.html
Copyright © 2011-2022 走看看