java密码安全

目录

密码学

古典密码学

现代密码学

ASCII编码

Byte和bit

常见加密方式

加密模式

 填充模式

非对称加密

 数字签名


密码学

密码学是网络安全、信息安全、区块链等产品的基础,常见的非对称加密、对称加密、散列函数等,都属于密码学范畴。

密码学有数千年的历史,从最开始的替换发到如今的非对称加密算法,经历了古典密码学,近代密码学和现代密码学三个阶段。

古典密码学

1. 替换法

          替换法就是用固定的信息将原文替换成无法直接阅读的密文信息,有单表替换和多表替换两种形式。

单表替换即只有一张原文密文对照表单,发送者和接收者用这张表单来加密解密。

多表替换即有多张原文密文对照表单,不同字母可以用不同表单的内容替换。

2. 移位法

       移位法就是将原文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后得出密文,典型的移位法应用有 “ 恺撒密码 ”。

现代密码学

1. 散列函数

       散列函数也称哈希函数,可将任意长度的消息经过运算,变成固定长度数值,常见的有MD5、SHA-1、SHA256,多应用在文件校验、数字签名中。

      MD5可以将任意长度的原文件生成一个128位(16字节)的哈希值。

     SHA-1可以将任意长度的原文件生成一个160位(20字节)的哈希值。

2. 对称密码

       对称加密应用了相同的加密密钥和解密密钥。对称密码分为:序列密码(流密码)、分组密码(块密码)两种。

      流密码是对信息流中的每一个元素(一个字母或一个比特)作为基本的处理单元进行加密,块密码是先对信息流分块。再对每一块分别加密。

3. 非对称密码

      对称密码的密钥安全极其重要,加密这和解密这需要提前协商密钥,并各自确保密钥的安全性,一旦密钥泄露,即使算法是安全的也无法保障原文信息的私密性。

      在世界的使用中,远程的提前协商密钥不容易实现,及时协商好,在远程传输过程中也容易被他人获取,因此非对称密钥就凸显出了优势。

      非对称密码有两支密钥,公钥和私钥,加密和解密运算使用的密钥不同。用公钥对原文进行加密后,由私钥进行解密;用私钥对原文进行加密后(此时一般称为签名),需要由公钥进行解密(此时一般称为验签)。公钥可以公开的,大家使用公钥对信息进行加密,再发送给私钥持有者,私钥持有者使用私钥对信息进行解密,获得信息原文。因此私钥只有单一人持有,故不用担心被他人解密获取信息原文。

ASCII编码

        ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

Byte和bit

Byte : 字节. 数据存储的基本单位,比如移动硬盘1T , 单位是byte

bit : 比特, 又叫位. 一个位要么是0要么是1. 数据传输的单位 , 比如家里的宽带100MB,下载速度并没有达到100MB,一般都是12-13MB,那么是因为需要使用 100 / 8

关系: 1Byte = 8bit

获取字符串byte

public class ByteBit {
    public static void main(String[] args) {
        String a = "a";
        byte[] bytes = a.getBytes();
        for (byte b : bytes) {
            int c=b;
            // 打印发现byte实际上就是ascii码
            System.out.println(c);
        }
    }
}
97

byte对应bit

public class ByteBit {
    public static void main(String[] args) {
        String a = "a";
        byte[] bytes = a.getBytes();
        for (byte b : bytes) {
            int c=b;
            // 打印发现byte实际上就是ascii码
            System.out.println(c);
            // 我们在来看看每个byte对应的bit,byte获取对应的bit
            String s = Integer.toBinaryString(c);
            System.out.println(s);
        }
    }
}
97
1100001

运行程序

打印出来应该是8个bit,但前面是0,没有打印 ,从打印结果可以看出来,一个英文字符 ,占一个字节。

在中文情况下:

如果使用的是utf-8编码格式,一个中文对应3个字节。

如果使用的是gbk编码格式,一个中文对应2个字节。

在英文情况下

    英文在不同的编码格式占用的字节是一样的。没有编码的概念,全部对应的是一个字节。

常见加密方式

1. 对称加密

  • 采用单钥密码系统的加密方法,统一密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称单密钥加密。
  • 示例
    • 我们现在有一个原文3要发送给B
    • 设置密钥为108, 3 * 108 = 324, 将324作为密文发送给B
    • B拿到密文324后, 使用324/108 = 3 得到原文
  • 常见加密算法
    • DES : Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
    • AES : Advanced Encryption
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值