java常用密码简介及代码实现

Base64

  简介

Base64是基于64个可打印字符(a-z,A-Z,0-9,+、/)来显示2进制数据,它用于传输8Bit字节代码,并在网络传输中广泛应用或者本地存储字节数组。不是加密和解密

使用示例

public class Base64Test {public static final String UTF= StandardCharsets.UTF_8.name();@Testpublic void test1() throws UnsupportedEncodingException {String message = "法律a";byte[] encode = Base64.getEncoder().encode(message.getBytes(UTF));System.out.println(Arrays.toString(encode));String enCodeStr = new String(encode, UTF);System.out.println(enCodeStr);byte[] decode = Base64.getDecoder().decode(enCodeStr.getBytes(UTF));String deCodeStr = new String(decode, UTF);System.out.println(deCodeStr);}@Testpublic void test2() throws UnsupportedEncodingException {String message = "法律a";byte[] encode = org.apache.commons.codec.binary.Base64.encodeBase64(message.getBytes(UTF));String enCodeStr = new String(encode, UTF);System.out.println(enCodeStr);byte[] decode = org.apache.commons.codec.binary.Base64.decodeBase64(enCodeStr.getBytes(UTF));String deCodeStr = new String(decode, UTF);System.out.println(deCodeStr);}
}

URL编码

简介

当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符去表示那些不安全的字符

使用示例

public class UrlCodeTest {public static final String UTF= StandardCharsets.UTF_8.name();public static final String DEMO_STR= "法律";@Testpublic void test1() throws UnsupportedEncodingException {String encodeStr = URLEncoder.encode(DEMO_STR, UTF);System.out.println("url encode result is :" + encodeStr);String decodeStr = URLDecoder.decode(encodeStr, UTF);System.out.println("url decode result is :" + decodeStr);}
}

摘要算法

简介

又叫Hash算法、散列函数、数字摘要、消息摘要,是一种单向算法(不可逆),可以根据该算法对目标信息生成固定长度的唯一hash值,不能逆向计算(不可通过计算的hash值反推目标信息)。其中较为常用的:

        MD5、SHA-256、SHA-512

        HmacMD5、HmacSHA256、HmacSHA512

使用示例

MD5

  D5算法将字符串转换成128位-->16个字节,转换成16进制字符创表示,一个16进制数字占4位,所以最后的MD5值都是用32个16进制数字表示

public class Md5Test {public static final String UTF= StandardCharsets.UTF_8.name();public static final String MD_NAME= "MD5";public static final String DEMO_STR= "法律";/*** jdk原始*/@Testpublic void test1() throws NoSuchAlgorithmException, UnsupportedEncodingException {String digest = MessageDigestUtil.digest(DEMO_STR, MD_NAME);// c47d7a21cdb9a974df82eef105477becSystem.out.println(digest);}/*** codec原始*/@Testpublic void test2() throws NoSuchAlgorithmException, UnsupportedEncodingException {String s = DigestUtils.md5Hex(DEMO_STR);// c47d7a21cdb9a974df82eef105477bec// c47d7a21cdb9a974df82eef105477becSystem.out.println(s);}
}

SHA-256

SHA-256和MD5算法差不多,消息摘要算法,不可逆。不管字符串长度多少,生成一个固定长度的字符串,SHA-256生成一个256位--也就是32个字节,转换成16进制字符之后是62个字符长度的字符串

/*** SHA-256和MD5算法差不多** 消息摘要算法,不可逆。不管字符串长度多少,生成一个固定长度的字符串** SHA-256生成一个256位--也就是32个字节** 转换成16进制字符之后是62个字符长度的字符串*/
public class Sha256Test {public static final String ALGORITHM_NAME= "SHA-256"; // 算法名称public static final String DEMO_STR= "法律";/*** jdk原生的SHA-256*/@Testpublic void test1() {String digest = MessageDigestUtil.digest(DEMO_STR, ALGORITHM_NAME);// 32bc0a3372fcf9cb2699e5d46eb51d73081d65bb18d82af3929001ee2240af6aSystem.out.println(digest);}/*** codec包的SHA-256*/@Testpublic void test2() {String digest = DigestUtils.sha256Hex(DEMO_STR);// 32bc0a3372fcf9cb2699e5d46eb51d73081d65bb18d82af3929001ee2240af6a (jdk原生)// 32bc0a3372fcf9cb2699e5d46eb51d73081d65bb18d82af3929001ee2240af6a  (codec)System.out.println(digest);}
}

SHA-512

HA-512、SHA-256和MD5算法差不多

消息摘要算法,不可逆。不管字符串长度多少,生成一个固定长度的字符串,SHA-512生成一个512位--也就是64个字节,转换成16进制字符之后是128个字符长度的字符串

/*** SHA-512、SHA-256和MD5算法差不多** 消息摘要算法,不可逆。不管字符串长度多少,生成一个固定长度的字符串** SHA-512生成一个512位--也就是64个字节** 转换成16进制字符之后是128个字符长度的字符串*/
public class Sha512Test {public static final String ALGORITHM_NAME= "SHA-512"; // 算法名称public static final String DEMO_STR= "法律";/*** jdk原生的SHA-512*/@Testpublic void test1() {String digest = MessageDigestUtil.digest(DEMO_STR, ALGORITHM_NAME);// 2001a3d435c3180120e9b748faf08bebae6a51c717ea21575771e68561da76fb8e4cdb48691aafc1a8b062ba54ab9680d656b9b28beedc948d01bd24d83082daSystem.out.println(digest);}/*** codec包的SHA-512*/@Testpublic void test2() {String digest = DigestUtils.sha512Hex(DEMO_STR);// 2001a3d435c3180120e9b748faf08bebae6a51c717ea21575771e68561da76fb8e4cdb48691aafc1a8b062ba54ab9680d656b9b28beedc948d01bd24d83082da (jdk原生)// 2001a3d435c3180120e9b748faf08bebae6a51c717ea21575771e68561da76fb8e4cdb48691aafc1a8b062ba54ab9680d656b9b28beedc948d01bd24d83082da  (codec)System.out.println(digest);}
}
public class MessageDigestUtil {public static final String UTF8= StandardCharsets.UTF_8.name();/*** 摘要算法** @param sourceStr 原始字符串* @param algorithm 算法名称如:MD5、SHA-256、SHA-512* @return 16进制字符串*/public static String digest(String sourceStr,String algorithm) {try {MessageDigest md = MessageDigest.getInstance(algorithm);// 结果字节数组byte[] digest = md.digest(sourceStr.getBytes(UTF8));// 转换成16进制字符串return HexUtil.transBytes2HexStr(digest);} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {e.printStackTrace();}return null;}/***  mac签名算法** @param sourceStr 原始字符串* @param key 秘钥* @param algorithm 算法名称,如:HmacMD5 HmacSha-256、HmacSha-512* @return 16进制字符串*/public static String macDigest(String sourceStr,String key,String algorithm) {try {// mac实例Mac mac = Mac.getInstance(algorithm);// 创建秘钥对SecretKey secretKey = new SecretKeySpec(key.getBytes(UTF8),algorithm);// 初始化macmac.init(secretKey);// 原始字符串字节数组byte[] originalBytes = sourceStr.getBytes(UTF8);// 结果字节数组byte[] bytes = mac.doFinal(originalBytes);// 转换成16进制字符串return HexUtil.transBytes2HexStr(bytes);} catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) {e.printStackTrace();}return null;}
}
public class HexUtil {/*** 字节数组转字16进制符串** @param digest 字节数组* @return 16进制字符串*/public static String transBytes2HexStr(byte[] digest) {StringBuilder builder = new StringBuilder();for (byte b : digest) {String s = Integer.toHexString(((int) b) & 0xff);if(s.length() == 1) {s = "0" + s;}builder.append(s);}return builder.toString();}/*** 16进制字符串转byte数组** @param hexStr 16进制字符串* @return 字节数组*/public static byte[] transHexStr2Bytes(String hexStr) {int length = hexStr.length();if (length % 2!=0) {throw new RuntimeException("hexStr length must be even number!");}byte[] bytes = new byte[length/2];for (int i = 0;i<bytes.length;i++) {int high4 = Integer.parseInt(hexStr.substring(i*2,i*2 +1),16);int low4 = Integer.parseInt(hexStr.substring(i*2+1,i*2 + 2),16);bytes[i] = (byte)(high4 * 16 + low4);}return bytes;}
}

 mac摘要 

Message Authentication Code 消息验证码,比摘要算法安全性更高,加入了一个秘钥

HmacMd5对应md5摘要算法,生成一个128位数字--16个字节,转换成16进制数字字符之后是32个字符

HmacSha256对应SHA-256摘要算法,生成一个256位数字--32个字节,转换成16进制数字字符之后是64个字符

HmacSha512对应SHA-512摘要算法,生成一个512位数字--64个字节,转换成16进制数字字符之后是128个字符

/*** mac类摘要算法* Message Authentication Code 消息验证码** 比摘要算法安全性更高,加入了一个秘钥** HmacMd5对应md5摘要算法,生成一个128位数字--16个字节,转换成16进制数字字符之后是32个字符** HmacSha256对应SHA-256摘要算法,生成一个256位数字--32个字节,转换成16进制数字字符之后是64个字符** HmacSha512对应SHA-512摘要算法,生成一个512位数字--64个字节,转换成16进制数字字符之后是128个字符*/
public class HmacTest {public static final String ALGORITHM_NAME= "SHA-256"; // 算法名称public static final String DEMO_STR= "法律";/*** jdk原生mac摘要算法*/@Testpublic void test1() {String key = "123";String hmacMD5Str = MessageDigestUtil.macDigest(DEMO_STR, key, "HmacMD5");// 2c50de960b42c1f86b3ba22e9de9e49fSystem.out.println("hmacMD5Str:" + hmacMD5Str);String hmacSHA256 = MessageDigestUtil.macDigest(DEMO_STR, key, "HmacSHA256");// 2128ed9d2e29c971995bf65d06c1671f3b77344631da122f4e463d07b9257e61System.out.println("hmacSHA256:" + hmacSHA256);String hmacSHA512 = MessageDigestUtil.macDigest(DEMO_STR, key, "HmacSHA512");// 381586ca8518b05799fe603805393afdac07e54af11fc9b04b8df6b644b77dfa37a6b0691f67d7b5a4ef1989d7751328a1d045c6ef26608062f51eac84bd6efaSystem.out.println("hmacSHA512:" + hmacSHA512);}/*** codec的mac摘要算法*/@Testpublic void test2() {String key = "123";String hmacMd5Str = new HmacUtils(HmacAlgorithms.HMAC_MD5, key).hmacHex(DEMO_STR);// 2c50de960b42c1f86b3ba22e9de9e49f(jdk原生)// 2c50de960b42c1f86b3ba22e9de9e49f(codec)System.out.println("hmacMd5Str:" + hmacMd5Str);String hmacSha255Str = new HmacUtils(HmacAlgorithms.HMAC_SHA_256, key).hmacHex(DEMO_STR);// 2128ed9d2e29c971995bf65d06c1671f3b77344631da122f4e463d07b9257e61(jdk原生)// 2128ed9d2e29c971995bf65d06c1671f3b77344631da122f4e463d07b9257e61(codec)System.out.println("hmacSha255Str:" + hmacSha255Str);String hmacSha512Str = new HmacUtils(HmacAlgorithms.HMAC_SHA_512, key).hmacHex(DEMO_STR);// 381586ca8518b05799fe603805393afdac07e54af11fc9b04b8df6b644b77dfa37a6b0691f67d7b5a4ef1989d7751328a1d045c6ef26608062f51eac84bd6efa(jdk原生)// 381586ca8518b05799fe603805393afdac07e54af11fc9b04b8df6b644b77dfa37a6b0691f67d7b5a4ef1989d7751328a1d045c6ef26608062f51eac84bd6efa(codec)System.out.println("hmacSha512Str:" + hmacSha512Str);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Grafana安装zabbix插件

文章目录 一、在线安装zabbix插件二、离线安装1.下载安装2.grafana配置zabbix数据源 一、在线安装zabbix插件 如果grafana服务器可以联网即可在线安装。 安装方法官网上有&#xff1a;官网链接联网安装比较慢。 二、离线安装 1.下载安装 官网下载链接 [rootnode1 src]# mo…

Js 对象如何判断对象自身为空

1.JSON.stringify() JSON.stringify({}) "{}" 缺点&#xff1a;如果存在 undefined/任意函数/symbol值 会被忽略或转成null 2. for in 配合 hasOwnProperty 缺点: 不能遍历不可枚举属性 3. Object.keys(obj).length 0 缺点: 不能遍历不可枚举属性 4. Obj…

猫罐头哪个品牌好?五款性价比高的猫罐头推荐

很多新手养猫的姐妹们都会为选罐头感到焦虑&#xff01;但是每种罐头都有优缺点&#xff0c;每只猫咪的胃口也都不同&#xff0c;只有适合自家猫的才是最好的。所以姐妹们在选罐头之前可以先做好功课&#xff0c;了解一下怎么选好的罐头。 作为家里有3只猫的铲屎官来说&#xf…

Text Intelligence - TextIn.com AI时代下的智能文档识别、处理、转换

本指南将介绍Text Intelligence&#xff0c;AI时代下的智能文档技术平台 Textin.com 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认…

Ubuntu 常用命令之 clear 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 clear命令在Ubuntu系统下用于清除终端屏幕的内容。这个命令没有任何参数&#xff0c;它的主要作用就是清理终端屏幕上的所有信息&#xff0c;使得屏幕看起来像是新打开的一样。 使用clear命令非常简单&#xff0c;只需要在终端中…

JavaScript读写15693 ICod2 卡源码

本示例使用设备 &#xff1a; https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.23eb789efg450Y&id615391857885 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t…

camera 客观校准 (1)——抓图

#灵感# 客观校准很多平台都有&#xff0c;无非是抓raw&#xff0c;导入到calibration tool 中&#xff0c;设置一些参数&#xff0c;导出相应的校准数据。抓raw的方法&#xff0c;也是大差不差。但有些地方细节容易忽略&#xff0c;所以罗列一下。 目录 blc: lsc: color: …

ELFK日志收集

文章目录 第一章:ELK日志收集系统介绍日志收集重要性ELK介绍EFK介绍ELFK介绍ES部署Kibana部署第二章:Logstach日志收集Logstash介绍Logstash安装Logstash Input输入插件Logstash Filter过滤插件Logstash Output输出插件Input fileFilter mutatesplit示例add_field示例remove_…

ATFX期市:安哥拉宣布退出OPEC,减产计划还能否彻底执行?

ATFX期市&#xff1a;昨日&#xff0c;安哥拉矿产资源、石油和天然气部长迪亚曼蒂诺阿泽维多在首都罗安达宣布&#xff0c;安哥拉决定退出OPEC&#xff0c;原因是此前OPEC第36次会议将安哥拉的产量配额设定为111万桶&#xff0c;不及安哥拉方面提出的118万桶。安哥拉的退出预计…

操作系统期末知识点总结

第一章 1、操作系统&#xff1a;OS是一个大型的系统软件、它负责计算机的全部软件和硬件资源的管理&#xff0c;并为用户提供良好的应用界面&#xff0c;使整个计算机系统实现高效率和高度自动化 2、操作系统的形成 1&#xff09;手工操作阶段 2&#xff09;批处理系统&…

Pooling方法总结(语音识别)

Pooling layer将变长的frame-level features转换为一个定长的向量。 1. Statistics Pooling 链接&#xff1a;http://danielpovey.com/files/2017_interspeech_embeddings.pdf The default pooling method for x-vector is statistics pooling. The statistics pooling laye…

掌握Jenknis基础概念

目录 任务&#xff08;Jobs&#xff09; 构建&#xff08;Builds&#xff09; 触发器&#xff08;Triggers&#xff09; 构建环境&#xff08;Build Environment&#xff09;&#xff1a; 插件&#xff08;Plugins&#xff09;&#xff1a; 参数化构建&#xff08;Paramet…

爬虫工具Curl!

爬虫工具Curl&#xff01; 链接: Curl 使用它可以将网站内的信息转成python可用格式 打开开发工具中的网络选项卡右键单击&#xff08;或按住 Ctrl 键单击&#xff09;请求单击“复制”→ “复制为 cURL”粘贴到上面的curl命令框中 !!!警告&#xff1a;复制的命令可能包含 co…

redis基本用法学习(C#调用NRedisStack操作redis)

redis官网文档中推荐C#中使用NRedisStack包连接并操作redis&#xff0c;本文学习C#调用NRedisStack操作redis的基本方式。   新建Winform项目&#xff0c;在Nuget包管理器中搜索并安装NRedisStack包&#xff0c;如下图所示&#xff1a; 主要调用StackExchange.Redis命名空间下…

从及格走向优秀的纷享销客,成为了SaaS“全村的希望”

前不久&#xff0c;国漫《长安三万里》爆火&#xff0c;让很多观众看到破防 。尤其是影片结尾李白的那一句“轻舟已过万重山”&#xff0c;更是戳中无数成年人泪点。 与很多创业公司一样&#xff0c;在过去十几年&#xff0c;纷享销客始终在中国SaaS产业摸爬滚打。同质化之争、…

如何实现设备远程控制?

在工业自动化领域&#xff0c;设备远程控制是一项非常重要的技术。它使得设备可以在远离现场的情况下进行远程操作和维护&#xff0c;大大提高了设备的可用性和效率。 设备远程控制的应用场景有哪些&#xff1f; 远程故障排除&#xff1a;当设备出现故障时&#xff0c;工程师…

QC/PD快充电源产品应用介绍

• 原边650-700V SJ MOSFET采用低FOM值的ESM 技术&#xff0c;有利于提高系统效 率&#xff0c; 以及更佳的EAS和EMI等特性&#xff0c;对于一些不含PFC电路的系统更友好。 • 副边采用低FOM值的SGT同步整流电路&#xff0c;相比肖特基二极管整流能有更低的 损耗&#xff0c;有…

CQ 社区版 V2.7.0 发布 | 数据源版本扩充、新增批量执行功能等

2023 年的最后一个社区版本来啦&#xff01;提前祝大家新年快乐~ ✿✿ヽ(▽)ノ✿ 应社区小伙伴的建议&#xff0c;本次版本增加了大量已支持数据源的适配版本&#xff01;&#xff01;&#xff01;&#xff08;是听劝的官方没错&#xff09;同时&#xff0c;新增批量执行、Blo…

elasticsearch-py 8.x的一些优势

​ 早在 2022 年 2 月,当 Elasticsearch 8.0 发布时,Python 客户端也发布了 8.0 版本。它是对 7.x 客户端的部分重写,并带有许多不错的功能(如下所述),但也带有弃用警告和重大更改。今天,客户端的 7.17 版本仍然相对流行,每月下载量超过 100 万次,占 8.x 下载量的 ~50…