Java中的MessageDigest NoSuchAlgorithmException
因此,我浏览了几个Stackoverflow线程和其他网站,同时试图找到解决方案 我正在做一项学校作业,要求使用MessageDigest实例 我将在下面粘贴我的代码,但我尝试过getInstance(“SHA-256”)和getInstance(“SHA-1”)以及getInstance(“MD5”)都有相同的错误 我还尝试添加带有“SUN”的provider参数,但随后我得到了一个 没有这样的例外 我的学校指令要求导入java.security.MessageDigest 我也尝试过导入java.security.,以防丢失一些东西 我试图得到一个提供者列表,但这并没有给我任何东西,它甚至无法编译 我已按照在上找到的“尝试/捕获”说明进行操作。还是没什么 我不知道下一步该去哪里,而且似乎没有一个网站对此有可靠的答案 根据Oracle的说法,这个过程应该在提供者之间循环,直到找到一个支持您选择的算法为止。我已经尝试了他们列表中的所有三种算法 我知道这可能是我忽略的一件非常简单的事情,但我似乎无法把它弄清楚。任何帮助都将不胜感激。代码如下 -乔恩 代码:Java中的MessageDigest NoSuchAlgorithmException,java,spring,eclipse,rest,Java,Spring,Eclipse,Rest,因此,我浏览了几个Stackoverflow线程和其他网站,同时试图找到解决方案 我正在做一项学校作业,要求使用MessageDigest实例 我将在下面粘贴我的代码,但我尝试过getInstance(“SHA-256”)和getInstance(“SHA-1”)以及getInstance(“MD5”)都有相同的错误 我还尝试添加带有“SUN”的provider参数,但随后我得到了一个 没有这样的例外 我的学校指令要求导入java.security.MessageDigest 我也尝试过导入ja
package com.snhu.sslserver;
导入org.springframework.boot.SpringApplication;
导入org.springframework.boot.autoconfigure.springboot应用程序;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RestController;
导入java.security.MessageDigest;
导入java.util.Scanner;
@SpringBoot应用程序
公共类服务器应用程序{
公共静态void main(字符串[]args){
run(ServerApplication.class,args);
}
}
@RestController
类服务器控制器{
//创建消息摘要的实例
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
//FIXME:添加哈希函数以返回应包含您的姓名的数据字符串的校验和值。
@请求映射(“/hash”)
公共字符串myHash(){
String data=“你好,乔·史密斯!”;
返回“数据:”+数据;
}
}
独立使用问题
MessageDigest实例不是线程安全的。
没有螺纹安全保证
请不要像这样使用MessageDigest实例(除非您的控制器在请求范围内)
假设
MessageDigest
ThreadLocal
实例计算摘要Fiber
s会尊重这种使用方式(如果不是,我们在java生态系统中有更大的问题)这是否回答了您的问题?只有显式构造函数才能抛出,您需要定义
public ServerController()抛出NoSuchAlgorithmException{this.md=MessageDigest.getInstance(“SHA-256”);}
并删除字段初始值设定项:private MessageDigest md;
。谢谢@PiotrP.Karwasz,我现在就试试。@jon,请检查下面的答案。它不是线程-safe@Horse,谢谢!我刚查过,现在正在处理你的推荐。我真的很感谢你的帮助!谢谢你的马!我真的很感谢你详细的回答。很高兴能帮上忙
package com.snhu.sslserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.security.MessageDigest;
import java.util.Scanner;
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
@RestController
class ServerController{
//create instance of message digest
MessageDigest md = MessageDigest.getInstance("SHA-256");
//FIXME: Add hash function to return the checksum value for the data string that should contain your name.
@RequestMapping("/hash")
public String myHash(){
String data = "Hello Joe Smith!";
return "<p>data:"+data;
}
}