Java编码摘要算法实例解析

这篇文章主要介绍了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();

,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值

(0)

相关推荐

  • Java编码辅助工具Mapstruct用法详解

    前言 项目开发中,业务分层会涉及不同类型的Bean之间需要相互转换,如PO与DTO之间,PO与VO之间等.手动编码setter/getter各个对应属性,会显得臃肿繁琐.通过Mapstruct框架可简单方便地完成这一工作. 如何引入: IntelliJ IDEA中安装MapStruct Support插件:File -> Settings -> Plugins 搜索 MapStruct support 安装,同时File -> Settings -> Compiler ->

  • java转换字符串编码格式的方法

    java转换字符串编码格式 (解码错误,重新解码) 字符集概念:规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系. 我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制的比特流. 乱码场景(纯属瞎掰): 1) 前台输入utf-8编码的一串汉字(string1). (页面编码为utf-8, 在内存中会将这串汉字以utf-8编码为对应的二进制流存储) 2) 这串汉字(string1)的二进制流在经过http协议传输到后台时,这段

  • 聊聊java中一些减少if else 的编码习惯的方法

    前言 前段时间在阅读别人所写的代码的时候 , 发现其中一些业务相关的方法体内 , 出现了比较多的if-else语句多层嵌套的情况  . 首先我个人不是不提倡写if-else语句 , 不得不说 , 很多时候 , 在写某些逻辑 使用if-else 去做判断 , 代码看起来还是十分直观的  , 但是如果滥用if-else , 形成多层嵌套或者形成, 其中每个case 还包含了大量的逻辑 , 此时从可读性来说 , 使用if-else就有点得不偿失了 .  而且某些时候 ,  可能并不需这么多的if-el

  • JavaWeb中文编码问题实例讲解

    一.JavaWeb编程中乱码的成因 因为计算机只认识0与1,在网络上要想传输各种字符就需要进行编码.而由于编码.传输.解码过程存在各种不确定性,导致乱码问题频发,成为困扰初学者的一大问题.本文就试图用最简单的示例解释乱码问题. 1.为什么会出现乱码问题 如同发电报一样,如果发报的采用一个密码本进行发报,而接收端采用另外的密码本进行解码,肯定会导致无法解码一样.如果在计算机网络中传输数据,发送端采用的编码和接收端采用的编码不一致就会导致乱码问题. 2.认识各种编码: ASCII: ASCII(Am

  • java多媒体文件编码 处理工具类代码实例

    这篇文章主要介绍了java多媒体文件编码 处理工具类使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 引入 <dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-core</artifactId> <version>1.1.0</version> </dependency>

  • java实现文件编码转换的方法

    在开发过程中,可能会遇到文件编码的转换,虽然说开发工具eclipse可以转换编码,但是有的情况却很不方便.比如,原来文件本身的编码是GBK,现在要转换成UTF-8,如果直接在eclipse中把文件编码修改成UTF-8,恭喜你,是乱码,因为不能直接从GBK到UTF-8进行转换,这时就需要我们手动的来转换编码.下面是一个文件编码转换的工具类. package com.mikan.stuff; import java.io.File; import java.io.FileInputStream; i

  • Java找不到或无法加载主类及编码错误问题的解决方案

    先给出具体代码(当前目录为:D:\pro): package org.test; public class TestJava{ public static void main(String args[]){ System.out.println("Hello World!!!"); System.out.println("你好,Java!!"); } } 1. cmd 窗口运行时出现"找不到或无法加载主类"问题: D:\pro>javac

  • Java实现base64图片编码数据转换为本地图片的方法

    本文实例讲述了Java实现base64图片编码数据转换为本地图片的方法.分享给大家供大家参考,具体如下: 项目中用到的把base64图片数据转为本地图片的函数 /** * 替换html中的base64图片数据为实际图片 * @param html * @param fileRoot 本地路径 * @param serRoot 服务器路径 * @return */ public static String replaceBase64Image(String html,String fileRoot

  • Java编码摘要算法实例解析

    这篇文章主要介绍了Java编码摘要算法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 URL 编码与解码 String s = "你好,世界!"; // URL 编码 String urlEncodedString = URLEncoder.encode(s, "UTF-8"); // URL 解码 String urlDecodedString = URLDecoder.decode(urlEncoded

  • Java String创建对象实例解析

    本文研究的主要是Java String创建对象的问题,具体介绍如下. 首先我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,String只是一个引用变量. 所有的字符串都是String对象,由于字符串常量的大量使用,java中为了节省时间,在编译阶段,会把所有字符串常量放在字符串常量池中,字符串常量池的一个好处就是可以把相同的字符串合并,占用一个空间. 虽然在Java中无法直接获取变量的地址,但是可以用==判断一下两个引用变量是否指向了一个地址即一个对象. 栈内存 堆内存 基础类

  • Java编程WeakHashMap实例解析

    简述: <Thinking in Java>第4版 P519 页 WeakHashMap一章读书笔记 WeakHashMap 用来保存WeakReference,这一结构云逊垃圾回收器自动清理键和值 在添加键和值的操作时,映射会自动使用WeakReference包装它们, 见jdk源代码, public V put(K key, V value) { Object k = maskNull(key); int h = hash(k); Entry<K,V>[] tab = getT

  • java hasNext()使用实例解析

    这篇文章主要介绍了java hasNext()使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 编写一段程序实现如果输入的一组数中含非整数数字,输出数字相加的和以及"attention"字符,如果全部是数字便输出数字的和. 程序1: package mian; import java.util.Scanner; public class mian { public static void main(String[] args

  • Java数据类型转换实例解析

    这篇文章主要介绍了Java数据类型转换实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 数据类型转换 Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换. 数据类型的转换分类 自动类型转换 自动类型转换(隐式):将 取值范围小的类型自动提升为取值范围大的类型 . 转换规则 :范围小的类型向范围大的类型提升, byte.short.char 运算时直接提升为 int . byte.short.

  • Java Comparator比较器实例解析

    这篇文章主要介绍了Java Comparator比较器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 说几点需要注意的,提醒自己即可: 以下是单独定义一个比较器的类,实现了Comparator中的compare方法.(要在Main方法外面定义类噢) 一定是compare而不是Compare哦 package xixixi; import java.util.*; public class Main { public static voi

  • Java枚举抽象方法实例解析

    这篇文章主要介绍了Java枚举抽象方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求背景 需求已经确定了几个固定的常量值,并且每个常量值都有相同的行为,但是具体实现细节不同.建议使用枚举抽象方法,优点:结构清晰,便于扩展. 枚举类实现抽象方法 与常规抽象类一样,enum类允许我们为其定义抽象方法,然后使每个枚举实例都实现该方法,以便产生不同的行为方式,注意abstract关键字对于枚举类来说并不是必须的,举个栗子: public

  • Java语言一元运算符实例解析

    一元运算符,也叫单项算符,一目运算符,一元算符 ,英文名字:UnaryOperator. 描述:接受一个参数为类型T,返回值类型也为T. 源码: public interface UnaryOperator<T> extends Function<T, T> { /** * Returns a unary operator that always returns its input argument. * * @param <T> the type of the inp

  • Java定时器问题实例解析

    定时器问题 定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持.一个定时器的实现需要具备以下四种基本行为:添加定时器.取消定时器.定时器检查.到期执行. 请设计一个定时器并实现以下三种基本行为,函数原型已给出,可使用任意编程语言设计数据结构及实现,并尽可能高效地支持大量定时器: // 添加定时器:经过特定时间间隔后执行目标操作 // 输入 1:Interval 定时器时间,单位ms // 输入 2:ExpiryAction 目标操

  • java简单冒泡排序实例解析

    一.算法原理 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 二.实现思路 用二重循环实现,外循环变量设为i,内循环变量设为j.假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,...,1次.每次进行比较的两个元素都是与内循环j有关的,它们可以分

随机推荐