Java 中编码与摘要算法
URL 编码与解码
String s = "你好,世界!";
// URL 编码
String urlEncodedString = URLEncoder.encode(s, "UTF-8");
// URL 解码
String urlDecodedString = URLDecoder.decode(urlEncodedString, "UTF-8");
Base64 编码与解码
// Base64 编码
String base64EncodedString = Base64
.getEncoder()
// 去掉 Base64 后补位的 =
.withoutPadding()
.encodeToString("你好,世界!!".getBytes(StandardCharsets.UTF_8));
// Base64 解码
byte[] base64DecodedByteArray = Base64.getDecoder().decode(base64EncodedString);
String base64DecodedString = new String(base64DecodedByteArray, StandardCharsets.UTF_8);
byte[] 转 16 进制字符串
后面摘要算法可视化结果时会用到
/**
* byte[] 按位转换为 16 进制 String
* @param aData 需要转换的 byte[]
* @return byte[] 按位转换为的 16 进制 String
*/
public static String byteArrayToHexString(byte[] aData) {
final char[] hexChars = "0123456789abcdef".toCharArray();
// 一个字节用两个 16 进制字符表示
StringBuilder stringBuilder = new StringBuilder(aData.length * 2);
for (byte b : aData) {
// 高 4 位转换为 16 进制
stringBuilder.append(hexChars[(b >>> 4) & 0x0f]);
// 低 4 位转换为 16 进制
stringBuilder.append(hexChars[b & 0x0f]);
}
return stringBuilder.toString();
}
MD5 算法
// 参数为摘要算法的名称
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
// 以下两行代码相当于 messageDigest.update("你好,世界!".getBytes(StandardCharsets.UTF_8));
messageDigest.update("你好,".getBytes(StandardCharsets.UTF_8));
messageDigest.update("世界!".getBytes(StandardCharsets.UTF_8));
byte[] md5Bytes = messageDigest.digest();
SHA1 算法
// SHA256 把算法名称换一下就行了
MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
// 以下两行代码相当于 messageDigest.update("你好,世界!".getBytes(StandardCharsets.UTF_8));
messageDigest.update("你好,".getBytes(StandardCharsets.UTF_8));
messageDigest.update("世界!".getBytes(StandardCharsets.UTF_8));
byte[] md5Bytes = messageDigest.digest();
Java 中编码与摘要算法的更多相关文章
- java中编码种类和区别
为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言.由于人类的语言有太 ...
- Java中编码问题
在开发过程中经常会遇到一会乱码问题,不是什么大问题,但是也挺烦人的,今天来将我们开发总结的经验记录下来,希望可以给大家一些帮助. 一些概念: 字符:人们使用的记号,抽象意义上的一个符号.比如:‘1’, ...
- 关于Java中编码集的有趣现象和解释
这是在整理另一篇博客的时候发现的一个有趣的现象,是这样描述的:我们都知道Java默认使用的是UniCode编码集,我们也知道char类型占用两个字节.所以奇怪的现象又发生了(见代码): @Test p ...
- Java——Java中编码问题
在开发过程中经常会遇到一会乱码问题,不是什么大问题,但是也挺烦人的,今天来将我们开发总结的经验记录下来,希望可以给大家一些帮助. 一些概念: 字符:人们使用的记号,抽象意义上的一个符号.比如:‘1’, ...
- 【JAVA编码专题】深入分析 Java 中的中文编码问题
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么 ...
- 深入分析 Java 中的中文编码问题
登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Del ...
- [转]深入分析 Java 中的中文编码问题
收益匪浅,所以转发至此 原文链接: http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 深入分析 Java 中的中文编码问题 编 ...
- 深入分析 Java 中的中文编码问题(转)
几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...
- 深入分析 Java 中的中文编码问题 (文章来自网络)
许令波,developerWorks 中国网站最佳作者,现就职于淘宝网,是一名 Java 开发工程师.对大型互联网架构设计颇感兴趣,喜欢钻研开源框架的设计原理.有时间将学到的知识整理成文章,也喜欢记录 ...
随机推荐
- June 03rd 2017 Week 22nd Saturday
Truth and roses have thorns about them. 真理和玫瑰,身边都有刺. Yesterday, I met with a young, beautiful profes ...
- C语言 Printf函数
#include <stdio.h> int main(int argc, const char * argv[]) { // insert code here... printf(&qu ...
- 【[AH2017/HNOI2017]礼物】
题目 又是我不会做的题了 看看柿子吧 \[\sum(a_i+c-b_i)^2\] 最小化这个柿子 之所以不写下标是因为我们这个\(\{a\},\{b\}\)可以循环同构 那就开始化吧 \[\sum(a ...
- Hinge Loss
http://blog.csdn.net/luo123n/article/details/48878759 https://en.wikipedia.org/wiki/Hinge_loss ...
- 【题解】洛谷P3166 [CQOI2014] 数三角形(组合+枚举)
洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的 ...
- LeetCode2.两数相加 JavaScript
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- 使用补丁破解IntelliJ IDEA 2017收费版本(转)
1. 首先去官网http://www.jetbrains.com/idea/download/#section=windows下载Ultimate版(注意不是community版)下载并安装.一定要记 ...
- C#中Math.Round()的中国式用法
C#中的Math.Round()并不是使用的"四舍五入"法.而是(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. ...
- iptables防火墙常用命令参数
iptable添加一条规则开放22端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport ...
- NSDictionary+JSON - iOS
日常开发中常用的一个相互转换的方法; 直接创建对应的类,引用如下方法即可实现; 具体 code 如下: 声明: #import <Foundation/Foundation.h> @int ...