Java中WEAK_PASSWORD_HASH的修改策略
在采用SHA-256对数据进行加密时,我们可以直接采用下面的方式进行处理:
public static String encodeBySha256(String content) {
String encode = "";
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(content.getBytes("UTF-8"));
encode = bytesToHex(messageDigest.digest());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return encode;
}
public static String bytesToHex(byte... src) {
if (src == null || src.length <= 0) {
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < src.length; i++) {
int value = src[i] & 0xFF;
String hexValue = Integer.toHexString(value);
if (hexValue.length() < 2) {
sb.append(0);
}
sb.append(hexValue);
}
return sb.toString();
}
上述代码能够实现对数据的SHA-256加密,但是会在encode = bytesToHex(messageDigest.digest());这一行提示WEAK_PASSWORD_HASH问题,这主要是因为不适宜直接调用messageDigest.digest()方法。那如何解决呢,我们可以采用反射的方式来处理,直接看下面修改后的代码:
public static String encodeBySha256(String content) {
String encodeString = "";
try {
Class<?> mdClass = Class.forName("java.security.MessageDigest");
Method method = mdClass.getMethod("getInstance", String.class);
MessageDigest messageDigest = (MessageDigest) method.invoke(null, "SHA-256");
messageDigest.update(content.getBytes("UTF-8"));
method = mdClass.getMethod("digest");
byte[] bytes = (byte[]) method.invoke(messageDigest);
encodeString = bytesToHex(bytes);
} catch (Exception exception) {
System.out.println(exception.getMessage());
}
return encodeString;
}
经过上述修改后,就不再报WEAK_PASSWORD_HASH的问题。
延伸:若是采用MD5的加密方式的话,只需要在method.invoke(null, "SHA-256")修改为method.invoke(null, "MD5")即可。
------20200117勉
Java中WEAK_PASSWORD_HASH的修改策略的更多相关文章
- java中有界队列的饱和策略(reject policy)
文章目录 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 使用Semaphore java中有界队列的饱和策略(rejec ...
- java中内存分配策略及堆和栈的比较
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...
- linux centos中添加删除修改环境变量,设置java环境变量
前言 安装完软件必要添加环境变量.指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋.好吧,好记星不如烂笔头.当然,最重要的是,百度出来的都他妈的是如何添加环境变量,只 ...
- Map java中的map 如何修改Map中的对应元素
Map java中的map 如何修改Map中的对应元素 Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map ...
- 分析java中clone()方法 (转载+修改)
Java中的clone() 方法 java所有的类都是从java.lang.Object类继承而来的,而Object类提供下面的方法对对象进行复制. protected native Object c ...
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...
- java中的策略设计模式
本文主要讲java中的策略模式:一个可以根据不同的传入参数而具有不同行为的方法,就叫策略模式.概念可能有点不好理解,具体看下面代码: import java.util.Arrays; /** * 策略 ...
- Java中如何修改Jar中的内容
一.摘要 好长时间没写blog了,之前换了一家公司.表示工作更有战斗力了,可惜就是没时间写文章了.在这段时间其实是遇到很多问题的,只是都是记录下来,并没有花时间去研究解决.但是这周遇到这个问题没办法让 ...
- Java中的String真的无法修改吗
Java中String一旦赋值将无法修改,每次对String值的修改都是返回新的String. 如何在不创建新的String对象的情况下,对String的值进行修改呢? String类中的包含一个字段 ...
随机推荐
- Git 分支设计规范
概述 这篇文章分享 Git 分支设计规范,目的是提供给研发人员做参考. 规范是死的,人是活的,希望自己定的规范,不要被打脸. 在说 Git 分支规范之前,先说下在系统开发过程中常用的环境. 简称 全称 ...
- HBASE手动触发major_compact
1.定时执行脚本#!/bin/bash source /etc/profile sh ./hbase shell <<EOF major_compact 'table_name' EOF ...
- k8s系列----一个简单的例子
本实验来自k8s权威指南 解决访问demo出错,关键是靠https://www.cnblogs.com/neutronman/p/8047547.html此链接下面的某个大神的评论 主要yaml文件 ...
- implements Serializable有什么作用?
没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用.serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序 ...
- JavaScript——基础知识,开始我们的js编程之旅吧!
JavaScript基础第01天 1. 编程语言 编程语言: 可以通过类似于人类语言的"语言"来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言(Programming ...
- css—动画(transform, transition, animation)
transform 静态属性,一旦写进style里面,会立即显示作用,无任何变化过程.(类似于left, right, top, bottom这类属性) 主要用来做元素的变形 改变元素样式的属性主要有 ...
- nginx基础(一)
一.nginx的安装.启动.停止及文件解读 yum -y install gcc gcc-c++ autoconf pcre-devel make automake yum -y install wg ...
- c# 异步编程总结
异步编程前提 1.学委托 delegate 其中委托中的beginInvoke()和endInvoke()方法必须要会. 2.学习回调函数 (也可以不用,但是一般建议用回调函数中执行endinvoke ...
- 将Markdown编辑器搬进您的博客-让我们更优雅的书写文章
各位小伙伴们,冷月今天给大家发一波福利.我们都知道markdown编辑器非常的好用,是我们写作的好帮手.这样的一款好用的文章编辑器,我们怎么才能让自己的博客也支持呢,冷月今天来教大家如何将Markdo ...
- 有关鼠标在页面body获取点击事件的问题
首先说到这个问题我们先来谈谈body的高度问题,关于body高度的设置. 有些小伙伴可能就会说这个是多么的简单,直接进行如下操作不就可以了 body{ height:100%; } 这个设置虽然是想法 ...