byte数组 转化为 String 乱码

Roll_tissue 2017-04-15 03:16:29
需要对一个byte 数组的数据进行哈希处理,但是将其转化为string类型时出现乱码导致无法哈希。

该byte数组是一个拼接数组,长度为740,按照20 128 128 20 128 20 20 128 20 128的长度顺序拼接起来。

请问应该如何做哈希处理呢?需要什么编码方式呢?

byte[] inputdata = {-128, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 96, 48, 54, 101, -97, 51, -98, 24, -65, -59, 86, -2, 127, -40, -67, -83, 53, -25, -72, 47, 53, -47, 80, -33, 34, 43, 127, -33, -98, 12, -96, 19, 108, 40, -93, -106, -56, -4, 57, -27, 126, 93, 80, -72, 76, 121, -78, 66, -4, 103, 67, -34, -102, 61, 102, 108, -54, 108, 87, 77, -24, -11, 91, 69, 28, -120, 65, 44, 43, -67, -113, -53, -106, 96, 81, 114, -25, 30, -97, -89, 72, 4, 87, 64, 77, -15, -29, 127, 50, -56, -43, -100, 118, 75, 66, 92, 83, -74, -7, -13, 44, 127, 116, 110, 100, -118, 25, 24, -110, -127, -101, 26, -95, -94, 58, -113, 102, -19, 25, 4, 12, -7, -11, 116, -88, -16, 58, -94, 16, 73, -9, 121, -6, 1, -50, -11, -33, -127, 4, -54, 8, 79, 78, -17, -117, 0, -84, -92, 45, -82, -30, -24, -105, -14, 59, 31, -100, -81, 100, -67, 120, 104, 118, 87, 10, 1, 66, 61, -46, 111, -2, 45, -102, 107, -9, -28, -58, 17, 16, -17, 51, 89, -117, -71, 4, -88, 90, 54, -20, 1, -114, -111, 109, 6, -122, -2, 60, -104, 79, 99, -122, -51, -116, -119, -127, -91, -58, -15, -18, 99, 32, 50, -120, 93, 48, -25, -100, -105, 107, -30, -19, -42, 8, -121, -102, -116, -21, -99, -36, -17, 42, 30, 98, 88, -115, 31, 82, -113, 91, 24, 28, 46, -49, 105, -15, -21, 74, -66, -21, 46, -74, -52, -57, 99, -3, -68, 65, 94, 10, -86, 53, -35, 53, 108, 16, 76, 80, -87, 75, -39, -18, 0, 55, -29, -41, 93, -120, 69, -42, -114, -54, -117, -37, 44, 94, -72, -36, -32, 71, 100, 20, -114, 108, 114, 77, -103, 5, 64, -69, 44, -124, 41, 25, 113, 30, -102, 47, -49, -35, 118, 111, 86, 44, -25, 88, 62, 83, 16, -81, 100, 60, -82, 75, -98, -4, -14, -24, -51, -94, -91, 43, 96, -53, -46, -119, -48, 52, -52, -95, 21, -98, 21, -56, 107, 62, -117, -67, -46, -104, 20, 75, -21, 10, -12, 55, -80, -16, 49, -4, 104, 55, 92, -46, -63, -88, 106, 24, 99, -29, 125, 5, -61, 38, -79, -80, -70, -47, -100, -89, 94, 36, 26, -126, 62, -124, -26, 58, -17, -118, 50, 78, -102, 13, -121, -80, -53, 19, 58, -46, 105, -97, 113, 57, 96, 40, -45, -43, 117, 18, -121, -21, 92, -122, 95, 47, -101, -48, -95, -42, 89, -126, 116, -88, -69, 21, 16, -43, -80, 103, -121, 101, -45, -30, 71, -15, -115, -8, -53, 50, 63, 109, -120, 26, -64, 97, -55, -69, -20, -69, -90, -22, -30, 73, 121, -112, 82, -50, 125, -46, -47, 6, -116, 8, -79, -128, -67, 65, 50, -26, 81, -54, -30, -28, 107, -27, -21, 112, 108, -91, -54, -124, 18, 33, -21, 40, 107, 79, 103, 20, 7, 74, -115, 37, -3, 111, -77, 24, -108, -42, 3, 112, -78, -103, 80, -90, 101, 92, 3, 54, 61, 126, 120, 23, 84, 25, 63, -105, 111, -82, -82, -123, 93, -45, 95, 20, -42, 73, 99, -22, -72, 42, -25, -4, -114, -110, 65, 63, 11, -46, 25, 94, 120, -19, -50, 71, -59, -11, 60, -35, 93, 72, 112, 15, 28, -127, -86, 82, -53, -82, -28, -114, -92, -122, -15, 69, -97, 66, -121, 32, 33, 27, 93, 102, -74, 82, -37, 104, 4, -29, -1, 2, 90, -12, 27, 30, 24, 32, 109, 19, 53, -23, 82, 103, -29, -11, -41, 123, 93, -124, 14, -123, 117, -36, 27, 35, 53, 22, -79, -123, 124, -110, -30, -13, 53, 39, -74, 121, 62, 17, 46, -113, 123, 50, -69, -96, 51, -3, 90, -39, 125, -49, 119, -31, -102, -85, 101, 86, -5, 10, 55, 102, -9, -16, 60, -56, 8, 97, -27, 77, 17, 48, 21, -101, -92, -20, 70, 121, 54, 1, 21, -101, 77, -74, -38, 71, -128, 88, 29, 116, -9, 49, 85, -121, 19, -8, 63, -92, 78, 52, -50, 45, -57, 0, -62, 84, 116, -46, -64, 8, 13, -5, -53, 77, -91, 115, 26, -122, -124, 55, -23, -19, -12, -58, -13, -15, -91, 52, 72, 52, 77, -71, -79, 5, 94, -72, 117, -38, 25, -45, -87};
String inputStr = new String(inputdata);
System.out.println(inputStr);
MessageDigest mDigest = MessageDigest.getInstance("SHA-256", inputStr);
mDigest.update(inputdata);
byte[] sha = mDigest.digest();


...全文
1373 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
changerzhuo 2017-04-16
  • 打赏
  • 举报
回复
可以在创建的时候指定编码方式的。 new String(inputdata, "编码格式")
IO流: Input Output 输入输出流 自己去扩展: 1. 对象序列化和反序列化生成一个 2. 流的种类: io包下 扩展nio包下 1. IO分类: 输入流 输出流 字节流 InputStream(抽象类) OutputStream(抽象类) 字符流 Reader (抽象类) Writer(抽象类) 2.字节流:(重点) * 使用场景: * 1.字节流处理除了文本、文字相关所有的流问题,如,png/jpg/avi/map4/mp3/exe * 2.字符流只处理文本、文字相关(编码乱码问题) * * 1.输入流 abstract class InputStream:这个抽象类是表示输入字节流的所有类的超类。 * | * FileInputStream 子类:文件字节输入流 * 1. 构造方法 * FileInputStream(String name) name:表示(绝对路径、相对路径)文件名 * FileInputStream(File file) * * 2. 普通方法: //1. int read(byte[] b) 从输入流读取一些字节数,并将它们存储到缓冲区 b 。 最常用 * //2. int read() 从输入流读取数据的下一个字节。 //3. int read(byte[] b, int off, int len) 从输入流读取最多 len字节的数据到一个字节数组。 * 2.输出流 abstract class OutputStream:这个抽象类是表示输出字节流的所有类的超类。 * | * FileOutputStream 子类:文件字节输出流 * 1. 构造方法 FileOutputStream(String name) name:表示(绝对路径、相对路径)文件名 FileOutputStream(String name, boolean append) append:表示是否在该文件末尾追加数据,如果为true,表示追加,false,表示从头开始覆盖 * FileOutputStream(File file) FileOutputStream(File file, boolean append) * * 2. 普通方法: //1. void write(byte[] b, int off, int len) 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。 最常用 * //2. void write(byte[] b)将 b.length个字节从指定的字节数组写入此文件输出流。 //3. void write(int b) 将指定的字节写入此文件输出流。 3. 注意事项: 1. 必须要关闭IO流,节约资源开销 2. 关闭IO流原则,先开后关 3. IO流工具类的抽取,将所有的关流(字节流和字符流)方法抽取出来,优化代码 4. 字符流:(重点) * 使用场景:使用于处理文本相关的文件 * * Reader 抽象类: * |子类 * InputStreamReader(转换流) * |子类 * FileReader:适用于读取字符相关的文件 * 1. 构造方法: * 1.FileReader(File file) 2.FileReader(String fileName) fileName:文件名(相对路径/绝对路径) * * 2. 读取方法: * 3. int read(char[] c)读取字符到char数组中 最常用 * 2. int read()读取一个字符 * 3. int read(char[] c,int start,int length)读取制定长度的字符到char数组中 * * Writer 抽象类: * |子类 * OutputStreamWriter(转换流) * |子类 * FileWriter:适用于写出字符相关的文件 * 1. 构造方法: * 1.FileWriter(File file) 默认是false 2.FileWriter(File file, boolean append) append:表示是在文件末尾追加还是从头覆盖,如果true追加,false覆盖,默认是false 3.FileWriter(String fileName) 默认是false 4.FileWriter(String fileName, boolean append) fileName:文件名(相对路径/绝对路径) * 2. 写出方法: * 1. public Writer append(CharSequence csq,int start,int end) * 2. public Writer append(char c) * 3. public Writer append(CharSequence csq) * 4. public void write(char[] c) * 5. public void write(String str) * 6. public void write(String str,int start,int end) 5. 乱码问题:(掌握) GBK: 中文2个字节 英文、数字:1字节 UTF-8: 中文3~6个字节 英文、数字:1字节 编码:将字符串转换为字节 * 1. byte[] getBytes() 根据默认字符集将当前字符串转换为字节数组 * 2. byte[] getBytes(String charsetName) UTF-8/GBK * 按照指定的字符集将将当前字符串转换为字节数组 * * 解码:将字节转换为字符 * 1.String(byte[] bytes, int offset, int length) * 根据默认字符集将字节数组中从指定下标开始到指定长度结束的数据转换为字符串 * * 2.String(byte[] bytes, int offset, int length, String charsetName) * 根据指定字符集将字节数组中从指定下标开始到指定长度结束的数据转换为字符串 * charsetName:字符集名 例如 : "GBK"、"UTF-8" 、"ISO-8859-1" * * 不常用 * 3.String(byte[] bytes) 根据默认字符集将字节数组转换为字符串 * 4.String(byte[] bytes, String charsetName) * 根据默认字符集将字节数组转换为字符串 * * 这里会有乱码问题: * 产生的原因: * 1、因为字符集不统一,即编码和解码new String(b,0,read,"gbk")字符集不一致 * 2、因为字节流读取汉字的时候,字节数组长度不够,将一个汉字拆开了 * 解决: * 1. 用字符流用统一的字符集(最常用) * * 浏览器 : UTF-8 * 前台: * HTML :UTF-8 * CSS :UTF-8 * JS、JSP :UTF-8 * * 后台: * java :UTF-8 * * 数据库: * mysql、oracle、DB2 :UTF-8 * * 开发工具:UTF-8 * 2. 文本文件用统一的字符集 且用字符流读取和写出文本相关文件(最常用) * 3. 用一个大的字节数组(一般不用) 6. 转换流:(重点) 目前唯一一个可以设置字符集的流 (简单的理解为包装流,就是将字节流包装以下,方便操作文本相关的文件) * 使用场景: * 别人给提供了字节流,而需要处理文本文件,这时候,就需要用转换流转换一下,更方便处理文本文件 * * 作用:就是一字符流的方式读取或写出文本相关的数据 * * InputStreamReader:将字节输入流包装一下,让其更适合读取文本文件 * 构造方法: * 1.InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 * 2.InputStreamReader(InputStream in, String charsetName) 创建一个使用指定字符集的InputStreamReader。 * 普通方法: * public int read(char[] cbuf) * int read(char[] cbuf, int offset, int length) * OutputStreamWriter:将字节输出流包装一下,让其更适合写出文本文件 * 构造方法: * 1. OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。 * 2. OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用指定字符集的OutputStreamWriter。 普通方法: void write(char[] cbuf, int off, int len) append(CharSequence csq,int start,int end) 只有转换流可以设置字符集 7. jdk7关流的新方式: 用新结构可以自动关流 前提:该流必须是实现了一个接口 AutoCloseable 语法: try( //只能写创建流的操作,不能写其他业务操作 ){ //可能有异常的代码 }catch(异常类型1 e){ }...不需要finally关流了 8. 缓冲流:(重点)包装流 * 1.概念: 提高读取和写出效率的流 * 2.作用: 提高效率 3.使用场景:以后一律都要使用,以提高效率 建议以后都是用字节或者字符数组的方式复制文件,这样效率最高 * 4. * BufferedInputStream * 字节输入缓冲流构造方法: 1.BufferedInputStream(InputStream

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧