写点什么

密码你真的了解吗

用户头像
卢卡多多
关注
发布于: 5 小时前
密码你真的了解吗

密码学:

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

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

发布于: 5 小时前阅读数: 4
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
密码你真的了解吗