你真的会设置密码吗?


密码学:

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

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


原文始发于微信公众号(卢卡多多):你真的会设置密码吗?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/23481.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!