你真的会设置密码吗?

“这是我参与更文挑战的第8天,活动详情查看: 更文挑战

密码学:

大家晚上好,我是卢卡,这期主要是来了解一下密码学的知识,其实这期呢也是给大家长见识的篇目,为了更好的了解密码的面目,我们每天都在进行登录操作,比如抖音、微博以及很多的软件,第一次登录软件,都会要求登录账号,其实登录操作–就是为了捕捉用户,固定用户信息,从而进行权限控制。 每个软件都会有相应的功能特点,比如抖音做短视频,用户通过发送短视频,别的用户通过查看,比如评论权限,这都是通过用户账号,然后获取的同步信息,
以及我们每次鉴权登录的Token

数据解密真的太难了
数据解密真的太难了

密码的前世今生

古代加密:

使用药水,或者是移位法,比如遇水显示,
特殊的符号记录,暗号等;

现代加密:

  • 散列函数
  • 对称加密, 使用相同的加密秘钥和解密秘钥, 分为序列密码(流加密)+分组密码(块加密)
  • 非对称加密:

​ 显著特点是,加密和解密的秘钥不同 分为公钥和私钥两个

如何设置密码才安全:

1.密码不要太常见,简单密码不要,比如是123456789

2.各个软件的密码不要设置一样的,防止攻击者通过撞库

3.设置密码加一些特殊的标记,比如京东、淘宝,微信的字母,

英文密码的起源

罗马的人凯撒大帝,发明了最初的加密英文算法,

凯撒加密和解密:

利用英文字母的,想左右移动,最多移动25位置,破解

举个例子:

package com.atlucas;


/**
 * 凯撒加密,位移法
 */

public class KasirDemo {

    public static void main(String[] args) {
        //确定原文
        String yuanwen="Hello world";
        /**
         * 确定位移的位数,比如4位
         */

        int key=3;
        /**
         * 加密
         */

        String encrypt = encrypt(yuanwen, key);

        /**
         * 解密,需要密文和转化的位数key
         */

        String decrypr = decrypr(encrypt, key);
        System.out.println(decrypr);
    }

    /**
     * 凯撒解密,英文的字母交换
     * @param miwen  密文
     * @param key  偏移量
     * @return
     */

    private static  String decrypr(String miwen,int key){
        StringBuffer yuanwen=new StringBuffer();
        if (miwen.length()!=0&& key!=0){
            char[] chars = miwen.toCharArray();
            for (char name :chars){
                int move=name;
                move-=key;
                char a= (char) move;
                yuanwen.append(a);
            }

        }else {
            return "解密失败";
        }



        return "解密成功"+yuanwen.toString();
    }


    /**凯撒大帝的加密方法
     * 加密方法
     * @param yuanwen  原文
     * @param key     偏移量
     */

    private static String encrypt(String yuanwen, int key) {
        //开始加密
        /**
         * 1.将字符串转化成字节数组,新增一个字符串空的
         * 2.将数组遍历
         * 3,遍历时候,开始原文的位置移动,偏移量
         * 4.回写好原文生成密文
         */


        StringBuffer miwen=new StringBuffer();//线程安全的字符串
        char[] chars = yuanwen.toCharArray();
        for (char name: chars){
            int moves=name;//原文字符+偏移量
             moves+= key;
            char a= (char) moves;
            miwen.append(a);

        }
        System.out.println("密文为"+miwen.toString());
        return miwen.toString();
    }


}

复制代码

其实这个可以可以被破解的,有点穷举的思想,

频率分析法:

统计学中的概率论,然后开始猜测,生成备份文件,然后查看

在不知道秘钥的情况下,也想进行破解密文,

也正是因为有智者,破解了凯撒加密的文章,罗马帝国也逐渐走向衰弱

字节和比特、位

学习计算机的时候,我们通常会知道,计算机是二进制的,只有0和1,但是
他可以表示十进制,十六进制更大的数字,它的存储单位就是比特

Byte和bit

Byte是字节:数据存储的基本单位,比如移动硬盘512GB,

bit: 简单说叫计算机的原始编码结构,0和1,

1个字节=8bit

Bit:位,比特,

一个字节==8bit

package com.atlucas;

import java.io.UnsupportedEncodingException;

/**
 * byte字节和bit比特区别
 * 1.一个汉字对应的是三个字节 ,在UTF-8下,
 * 2.如果是GBK, 一个汉字是两个字节,
 * 3.如果是英文,就无所谓编码格式,只占一个字节
 */

public class ByteTest {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String name="a";
        byte[] bytes = name.getBytes("GBK");  //将字符串转化成字节数组,可能默认是utf
        for (byte name2: bytes){
            //变成ASCII看一下多少
//            int ASCIIa=name2;
            System.out.println(name2);
//            System.out.println(ASCIIa);
            String s = Integer.toBinaryString(name2);  //二进制的返回值,bit
            System.out.println("二进制的这个汉子站"+s);


        }
    }
}

复制代码

加密算法的分类:

对称加密算法:

①加密速度快,秘钥不能泄露

②密文不可逆,泄密后破译的可能性极大

③一般结合base64去使用

④加密后编码表中找不到对应字符,出现乱码

常见的加密算法:

DES:Data encryption Standard 即数据加密标准,是一种使用密钥加密的块算法,

目前是AES:Advanced Encryption Stasndard,高级加密标准,目前也是比较常见的加密算法,

RSA,MD5等非对称加密的算法,通过对特定的编码进行改装,然后生成密文;

总结

今天因为业务需求,对于token的知识点需求比较多,我也在实际项目中遇到了,所有就开展是对密码,加密算法,以及token的类型文章的更新。

我是卢卡,明天要接着更文章了,晚安了

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享