码迷,mamicode.com
首页 > 编程语言 > 详细

Java加密与安全

时间:2019-03-03 18:53:55      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:padding   urlencode   解码   测试   tps   string   伪造   总结   void   

一、简介

数据安全

  • 防窃听
  • 防篡改
  • 防伪造
    古代加密方式:
  • 移位密码:HELLO => IFMMP 按照英文顺序往后移动一位
  • 替代密码:HELLO =>p12,5,3 或者是用某一本书的第几页第几行第几个字达到替换密码的目的

这些都是靠人的想象和直觉来涉及的,非常不靠谱,而现代计算机加密:

  • 建立在严格的数据理论基础上
  • 密码学逐渐发展成一门学科

总结

  • 设计一个安全的加密算法非常困难
  • 验证一个加密算法是否安全更加困难
  • 当前被认为安全的加密算法仅仅是迄今为止尚未被攻破
  • 不要 自己设计加密算法
  • 不要 自己实现加密算法
  • 不要 自己修改已有的加密算法

二、URL编码

一、什么是URL编码?
URL编码是浏览器发送数据给服务器时使用的编码。

  • key1=value1&key2=value2&key3=valuye
  • q=%E4%B8%AD%E6%96%87

什么是编码?
ascii码就是一种编码,例如

字母 编码(16进制)
A 0x41
B 0x42
C 0x43
D 0x44
... ...

汉字 Unicode编码 UTF-8编码
0x4e2d 0xe4b8ad
0x6587 0xe69687
0x7f16 0xe7bc96
0x7801 0xe7a081
... ... ...

URL编码规则是什么?

  • A-Z,a-z,0-9以及**-_.***保持不变
  • 其他字符以%XX表示
    例如:
    1.<:%3C
    2.中:%E4%B8%AD(utf-8:0xe4b8ad)

例子

/**
 * URL编码
 */
public class SecURL {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String original = "URL 参数";
        String encoded = URLEncoder.encode(original,"UTF-8");
        System.out.println("编码后:"+encoded);
        String ori = new String(URLDecoder.decode(encoded,"UTF-8"));
        System.out.println("解码后:"+ori);
    }
}

技术图片

总结

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

二、Base64编码
* 什么是Base64编码?
是一种把二进制数据用文本表示的编码算法,例如:byte[]{0xe4,0xb8,0xad} ==> "5Lit"

索引 编码 索引 编码 索引 编码
0 A 26 a 52 0
1 B 27 b 53 1
2 C 28 c ... ...
3 D 29 d 61 9
... ... ... ... 62 +
25 Z 51 z 63 /

目的

  • 是一种用文本(A-Z,a-z,0-9,+/=)表示二进制内容的方式
  • 适用于文本协议
  • 效率下降
    因为二进制经过base64编码它的长度会增加三分之一,如果数组的长度不是3的整数倍,末尾补0x00或0x00 0x00
    编码后加=表示补充了1个字节
    编码后加==表示补充了2个字节
    应用
  • 电子邮件协议
/**
 * Base64编码
 */
public class SecBase64 {

    public static void main(String[] args) throws Exception {
        String original = "Hello\u00ff编码测试";
        //withoutPadding()可以去掉编码后“=”这个字节,有没有=对于解码来说没有影响
        String b64 = Base64.getEncoder().withoutPadding().encodeToString(original.getBytes("UTF-8"));
        System.out.println(b64);
        String ori = new String(Base64.getDecoder().decode(b64), "UTF-8");
        System.out.println(ori);
    }
}

技术图片
由于标准的base64在url中会引起冲突,所以在url中使用base64编码会使用另外一种。
技术图片
在java中,使用url的base64编码它会把“+”变为“-”,把“/"变为“_”这样在传递url参数的时候不会引起冲突

总结

  • Base64是编码算法,不是加密算法
  • Base64编码的目的是把任意二进制数据编码为文本(长度增加1/3)
  • 其他编码:Base32、Base48、Base58

三、摘要算法

一、什么是摘要算法?

Java加密与安全

标签:padding   urlencode   解码   测试   tps   string   伪造   总结   void   

原文地址:https://blog.51cto.com/mazongfei/2357370

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!