Java教程

密码学

本文主要是介绍密码学,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

第一章 密码学

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于密码学的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!