密码学


第一章 密码学

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(); } }

 1.5 Byte和bit

  (1)中文对应的byte和bit

  (2)英文对应的byte和bit

package com.atguigu.bytebit;

import org.junit.Test;

public class ByteBit {
    //中文对应的byte和bit
    @Test
    public void getByte02() {
        String a = "商";
        byte[] bytes = a.getBytes();
        for (byte b : bytes) {
            //对应字节
            int c = b;
            //对应位
            String s = Integer.toBinaryString(c);
            System.out.println(c + " " + s);
            /**
             * -27 11111111111111111111111111100101
             * -107 11111111111111111111111110010101
             * -122 11111111111111111111111110000110
            * */
        }
    }
    //英文对应的byte和bit
    @Test
    public void getByte03() {
        String a = "a";
        byte[] bytes = a.getBytes();
        for (byte b : bytes) {
            //对应字节
            int c = b;
            //对应位
            String s = Integer.toBinaryString(c);
            System.out.println(c + " " + s);//97 1100001
        }
    }
}

 

 

 

 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM