密码学

第一章 密码学

1.1 密码学的基本概念

  密码学有数千年的历史,从最开始的替换法到如今的非对称加密算法,经历了古典密码学,近代密码学和现代密码学三个阶段。

  (1)古典密码学

    1.替换法

      例子:例如将 b 替换成 w ,e 替换成p ,这样bee 单词就变换成了wpp。

    2.移位法

      例子:约定好向后移动2位(abcde - cdefg),这样 bee 单词就变换成了dgg 

    3.古典密码学的破译方式

      使用频率分析法破解 

  (2)近代密码学

    恩尼格玛机

  (3)现代密码学

    1.散列函数  

      MD5、SHA-1、SHA256

    2.对称加密

      对称密码应用了相同的加密密钥和解密密钥。

      对称加密分为:序列密码(流密码)、分组密码(块密码)

    3.非对称密码

      非对称密码有两支密钥:公钥和私钥

1.2 ASCII编码

  ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)

密码学

 

  案例:

    (1)字符转换成Ascii码

    (2)字符串转换成Ascii码

public class AsciiDeom {
    //(1)字符转换成Ascii码
    @Test
    public void charToAsciiTest() {
        char a = 'A';
        int b = a;
        System.out.println(b);//65
    }
    //(2)字符串转换成Ascii码
    @Test
    public void stringToAsciiTest(){
        String str = "AaZ";
        char[] chars = str.toCharArray();
        for(char c : chars){
            int d = c;
            System.out.println(d);//65 97 90
        }
    }
}

 

 

1.3 凯撒加密

  (1)中国古代加密

      解字

    密码学

 

  (2)外国加密

       位移加密

     密码学

  (3)凯撒位移加密

     案例:利用位移法,把Hello world向右移动3位

package com.atguigu.ascii;

import org.junit.Test;

public class KaiserDemo {
    //利用位移法,把Hello world向右移动3位
    @Test
    public void KaiserDemo(){
        String str = "Hello world";
        char[] chars = str.toCharArray();
        String str1 ="";
        for (char c : chars){
            int a = c + 3;
            str1 += (char)a;
        }
        System.out.println("str1 = " + str1);//str1 = Khoor#zruog
    }
}

  (4)凯撒加密和解密 

package com.atguigu.ascii;

import org.junit.Test;

public class KaiserDemo {//凯撒位移加密和解密
    public static void main(String[] args) {
        String original = "Hello world";
        int key = 3;
        //凯撒加密
        String encryptKaiser = encryptKaiser(original, key);
        System.out.println("encryptKaiser = " + encryptKaiser);//encryptKaiser = Khoor#zruog
        //凯撒解密
        String decryptkaiser = decryptKaiser(encryptKaiser,key);
        System.out.println("decryptkaiser = " + decryptkaiser);


    }
    //凯撒加密
    public static String encryptKaiser(String encryptDate,int key){
        StringBuilder sb = new StringBuilder();
        char[] chars = encryptDate.toCharArray();
        for (char c : chars){
            int a = c + key;
            sb.append((char)a);
        }
        return sb.toString();
    }
    //凯撒解密、
    public static String decryptKaiser(String decryptKaiser,int key){
        StringBuilder sb = new StringBuilder();
        char[] chars = decryptKaiser.toCharArray();
        for(char c : chars){
            int a = c - key;
            sb.append((char)a);
        }
        return sb.toString();
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:JavaScript判断某个对象属性是否存在


下一篇:【深入BFC】 关于CSS中float布局,清除浮动,和margin合并的原理解析,解开你心中的那些困惑!