密码学

11 篇文章 0 订阅

密码学

密码学:主要是研究编制密码和破译密码的学科
密码学的主要目的:研究如何隐藏信息并且把信息传递出去的一个学科

1.1古典密码学

核心原理:替代法,移位法
凯撒加密
频度分析进行破译密码,在不知道密码的规则前提下,进行破译密码
如何设置密码才比较安全

1.2近代密码学

核心原理:替代法,移位法

1.3现代密码学

  • 散列函数
    MD5,SHA-1,SHA-256,SHA-512
  • 对称加密
    DES加密和解密,AES机密和解密
    对称加密的核心原理:流加密,块加密
    toString()和new String()核心原理和区别
    加密模式:ESB,CBC
    填充模式:NoPadding和PKCS5Padding
  • 非对称加密
    非对称加密的特点
    RSA算法和ECC算法
    数字摘要
    base64核心加密原则,和base64原理
    数字签名和数字证书
    keytool工具

1.4密码学的基本概念

密码:微信,QQ,支付宝,银行什么时候开始已经在使用
密码学:网络安全,信息安全,区块链这些学科的基础
密码学已经存在好几千年

1.5密码学的历史

1.5.1古典密码学

古代就已经开始使用密码,目的:就是希望保护信息

替换法

就是使用固定的信息,将原文替换成密文
例如:bee,将b替换成w,e替换p,单词就变成wpp
替换法的加密方式:第一种:单表提花,第二种:多表替换
单表替换:原文和密文使用的是同一张表
例如:abcde -->swtrp
多表替换:表示是有多张表,原文和密文进行对比
表单1:abcde-swtrp 、表单2:abcde-chfhk 、表单3:abcde-jftou
原文:bee
秘钥:312
秘文:fpk
在这里插入图片描述

移位法

移位法,是按照字母,在字母表上面的位置,进行移位
凯撒加密:位移法
例如 (往后移动两位):abcde -----> cdefg

古典密码学的破解方式

频率分析法:概率论
在这里插入图片描述

1.5.2近代密码学

恩尼格玛密码机 核心使用的也是移位法和替换法,后来被图灵(人工智能之父)破解了

1.5.3现代密码学

散列函数

散列函数,也叫做哈希函数,常见的加密方式:MD5,SHA-1,SHA-256

对称加密

对称加密,使用的加密方式和解密方式,使用的是同一把秘钥

非对称加密

非对称加密,有两把秘钥,使用公钥加密,必须使用私钥解密,或者私钥加密,必须使用公钥解密

1.5.4如何设置密码才安全

  1. 密码不要太常见,不要使用123456作为密码
  2. 各个应用软件里面的密码不要设置一样,撞库
  3. 在设置密码的时候,可以加一些图书的标记,注册京东,jd,zfb,szsgg

1.5.5凯撒加密和凯撒解密

原理:是吧26个字母,进行位移,往右边或者往左边位移,在位移的时候,需要注意的是,最多只能移动25位

 public static void main(String[] args) {
        //定义原文
        String input = "Hello World";
        //把原文右移动3位
        int key = 3;
        String s = encryptKarser(input, key);
        System.out.println("密文---->" + s);
        String s1 = descryptKarser(s, key);
        System.out.println("明文---->" + s1);
    }

    /**
     * 凯撒解密
     * @param s
     * @param key
     * @return
     */
    private static String descryptKarser(String s, int key) {
        //把字符串变成字节数组
        char[] chars = s.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (char aChar : chars) {
            int b = aChar;
            //往左边移动3位
            b = b - key;
            char newB = (char)b;
            stringBuilder.append(newB);
        }
        return stringBuilder.toString();
    }

    /**
     * 凯撒加密
     * @param input
     * @param key
     * @return
     */
    private static String encryptKarser(String input, int key) {
        //把字符串变成字节数组
        char[] chars = input.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (char aChar : chars) {
            int b = aChar;
            //往右边移动3位
            b = b + key;
            char newB = (char)b;
            stringBuilder.append(newB);
        }
        return stringBuilder.toString();
    }

1.6频率分析法

目的:在不知道秘钥的情况下,也想进行破解密文
原理;比如以英文为例:字母e,出现的频率是最高的,第二个频率最高的是t,然后就是a,当我们拿到密文的时候,密文里面也会出现一个频率最高的字母,假设密文里面出现频率最高的是j,可以假设密文里面的j,就是明文里面的e,假设密文里面出现第二个高的字母,就是明文当中的t。

1.7对称加密

特点:

  1. 加密速度快
  2. 密文不可逆转,秘钥不能泄露
  3. 如果在编码表找不到对应的字符,会出现乱码
  4. 一般需要结合base64一起使用

1.7.1加密和解密

DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥。秘钥key必须是八位字符。

1.7.2base64

base64介绍
base64不是加密算法,是可读性算法
base64不是为了保护我们的数据,而是为了可读性
base64是由64个字符组成,大写A-Z,小写a-z,数字0-9,两个符号,+和/
base64一般用在比特币上的一种加密编码
base64和base58的区别
在base58里面,没有数字0和字母o,没有大写字母I和小写字母i,也没有+和/
base64原理
base64 是三个字节位一组,一共是24位,base64把三个字节换成四组,每组六位,一个字节应该是八位,缺少两位,那么就会在高位补0,这样做得好处,base去后面六位,去掉前面两位,这样可以控制在0-63之间
111 111 = 32 + 16 + 8 + 4 + 2 + 1 = 63
在base64里面,要设置一共3个字节位一组,如果不够的话,就需要使用=好进行补齐
在这里插入图片描述

1.8toString 和new String的区别

new String====>MM#WLAN#DFDJWIOOAIIFIAU#+KJFKDKFHAHFOAJHOA=

toString=====>[B@1540e19d

注意:如果在使用编码,进行加密好解密的时候,需要使用new String()的方式
区别:
str.toString 方法,这个方法调用的实际上是Object,里面的toString方法,一般Object中的toString方法返回的是哈希值,也就是地址。
new String()方法:是根据参数,参数是一个字节数组,使用java虚拟机默认编码格式,会把字节数组decode,找到对应字符,如果虚拟机编码格式是ISO-8859-1的话,会去找ascii里面的编码进行参照,找到对应的字符。

1.9加密模式

ESB:把一段文本进行分拆加密,使用同一把key进行加密,然后组合到一起
CBC:在进行加密的时候,会取决于前面的iv向量,把前面的向量进行异或处理,后面的明文进行加密的时候,会一直依赖于前面的key

1.10非对称加密

简介:

  1. 非对称加密,又叫做现代加密算法
  2. 非对称加密必须有两个秘钥,一个私钥,一个公钥
  3. 公钥和私钥是一对,我们叫做秘钥对
  4. 如果使用私钥加密,就必须使用公钥解密
  5. 如果使用公钥加密,就必须使用私钥解密

常见的非对称加密算法

  1. RSA
  2. ECC

1.11数字签名

数字签名:公钥数字签名,只有信息的发送者才能产生别人无法伪造的一段数字串,类似写在纸上的普通物理签名。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值