ASCII编码最多只能有127个字符,想要对更多的文字进行编码。Unicode占用两个字节,UTF-8占用3个字节。
- URL编码:
编码(将任意文本编码成%前缀的文本)时用:URLEncoder.encode
解码(还原成原始字符串)时用:URLDecoder.decode
- Base64编码是对二进制进行编码(byte[ ]数组)
使用Base64编码,encodeToString(buf)将字节数组(二进制)转为String类型,然后传入到base64EncodeRet中。
用Base64进行解码时,需创建一个工具类(HashTools)。用来将字节数组转换为字符串
append方法用来拼接
1.从文本文件中读取Base64编码内容,并还原为字符串
2.对Base64编码的字符串进行解码,解码后的原始字节内容,保存成图片
注意:URL和Base64编码不是加密算法! 都是编码算法
- 哈希算法
对任意一组输入数据进行计算得到一个固定长度的输出摘要
目的:因为相同的输入一定的到相同的输出。所以通常被用来验证数据是否被篡改。
根据碰撞概率,哈希算法的输出长度越长,就越难产生碰撞,就越安全。
常用哈希算法
- MD5算法
调用update输入数据
按照MD5算法对图片加密:
- SHA-1算法
也是一种哈希算法,加盐操作。
产生随机的盐值:
String salt = UUID.randomUUID().toString().substring(0,4);
创建基于SHA-1算法的消息摘要对象:
计算加密结果,SHA-1的输出结果为20个字节(40个字符):
- Hmac算法:基于密钥信息认证的算法,可看作为带有key的MD5算法。
HmacMD5使用的key长度为64字节,更安全。
获取HmacMD5密钥生成器:
生成密钥:
接下来使用密钥进行加密:
最后输出:
2.已知keyBytes为字节数组,将密钥恢复为对应的字符串
3.已知密钥为字符串,将其转换为对应的字节数组