栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

加密与安全

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

加密与安全

编码算法:

编码:

ASCII编码:ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。(ASCII编码中文占两个字节,英文占一个字节)

UTF-8编码:utf-8是一种变长字节编码方式。对于某一个字符的utf-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。utf-8最多可用到6个字节。(UTF-8编码中文字占3个字节英文占一个字节)

URL编码:

URL 编码是浏览器发送数据给服务器时使用的编码,它通常附加在 URL 的参数部分。

URL编码规则:

● 如果字符是 A ~ Z , a ~ z , 0 ~ 9 以及 - 、 _ 、 . 、 * ,则保持不变;

● 如果是其他字符,先转换为 UTF-8 编码,然后对每个字节以 %XX 表示

java中有一个URLEncoder类可以对任意字符串进行URL编码:

import java.net.URLEncoder;
public class Main {
    public static void main(String[] args) {
        String encoded = URLEncoder.encode("中文!", "utf-8");
		System.out.println(encoded);
    }
}

 上述代码的运行结果是 %E4%B8%AD%E6%96%87%21 ,"中"的 URL 编码是 %E4%B8%AD ,"文"的URL编码是 %E6%96%87 , ! 虽然是 ASCII 字符,也要 对其编码为 %21 。

当然收到URL编码也可以解码:URLDecoder类

public class Main {
    public static void main(String[] args) {
        String decoded = URLDecoder.decode("%E4%B8%AD%E6%96%87%21", "utf-8");
		System.out.println(decoded);
    }
}

URL 编码是编码算法,不是加密算法。 URL 编码的目的是把任意文本数据编码为 % 前缀表示的文本,编码后的文本仅包含 A ~ Z , a ~ z , 0 ~ 9 , - , _ , . , * 和 % ,便于浏览器和服务器处理。

Ba'se64编码: 

Base64 编码的目的是把二进制数据变成文本格式,Base64 编码可以把任意长度的二进制数据变为纯文本,并且纯文本内容中且只包含指定字符内容: A ~ Z 、 a ~ z 、 0 ~ 9 、 + 、 / 、 = 。它的原理是把 3 字节的二进制数据按 6bit 一组,用 4 个int整数表示,然后查表,把 int 整数用索引对应到字符,得到编码后的字符串。、

在java中使用base64类对byte [ ] 进行编码和解码:

public class Main {
    public static void main(String[] args) {
        byte[] input = new byte[] { (byte) 0xe4, (byte) 0xb8, (byte) 0xad };
        String b64encoded = Base64.getEncoder().encodeToString(input);
        System.out.println(b64encoded);
    }
}
public class Main {
    public static void main(String[] args) {
        byte[] output = Base64.getDecoder().decode("5Lit");
        System.out.println(Arrays.toString(output)); // [-28, -72, -83]
    }
}

 因为标准的 Base64 编码会出现 + 、 / 和 = ,所以不适合把 Base64 编码后的字符串放到 URL 中。一种针对 URL 的 Base64 编码可以在 U RL 中使用的 Base64 编码,它仅仅是把 + 变成 - , / 变成 _ :

public class Main {
    public static void main(String[] args) {
        // 原始字节内容
		byte[] input = new byte[] { 0x01, 0x02, 0x7f, 0x00 };
		
		// 分别使用两种方式进行编码
		String b64Encode = Base64.getEncoder().encodeToString(input);
        String b64UrlEncoded = Base64.getUrlEncoder().encodeToString(input);
        
        // 结果完全一致
        System.out.println(b64Encode); 
        System.out.println(b64UrlEncoded);
        
        // 分别使用两种方式进行重新解码
        byte[] output1 = Base64.getDecoder().decode(b64Encode);
        System.out.println(Arrays.toString(output1));
        
        byte[] output2 = Base64.getUrlDecoder().decode(b64UrlEncoded);
        System.out.println(Arrays.toString(output2));
    }
}

 Base64 编码的目的是把二进制数据变成文本格式,这样在很多文本中就可以处理二进制数据。例如,电子邮件协议就是文本协议, 如果要在电子邮件中添加一个二进制文件,就可以用 Base64 编码,然后以文本的形式传送。

Base64 编码的缺点是传输效率会降低,因为它把原始数据的长度增加了1/3。和 URL 编码一样, Base64 编码是一种编码算 法,不是加密算法。

如果把 Base64 的 64 个字符编码表换成 32 个、 48 个或者 58 个,就可以使用 Base32 编码, Base48 编码和 Base58 编 码。字符越少,编码的效率就会越v 

小结:

  1. URL 编码和 Base64 编码都是编码算法,它们不是加密算法;
  2. URL 编码的目的是把任意文本数据编码为 % 前缀表示的文本,便于浏览器和服务器处理;
  3. Base64 编码的目的是把任意二进制数据编码为文本,但编码后数据量会增加 1/3 。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019518.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号