messagedigest-nosuchalgorithmexception

vxbzzdmp  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(252)

所以,我已经浏览了几个stackoverflow线程和其他网站,同时试图找到一个解决方案。
我正在做一个学校作业,需要使用messagedigest示例。
我将在下面粘贴我的代码,但是我尝试了getinstance(“sha-256”)和getinstance(“sha-1”)以及getinstance(“md5”),都出现了相同的错误。
我也尝试过添加带有“sun”的provider参数,但是我得到了一个
没有这样的例外。
我的学校指示要求 import java.security.MessageDigest .
我也试过了 import java.security.* 以防什么东西不见了。
我试图得到一个供应商名单,但这并没有给我什么,它甚至不会编译。
我已按照此网站上的try/catch说明进行操作。还是没什么。
我不知道下一步该何去何从,似乎没有一个网站对此有一个可靠的答案。
根据oracle的说法,这个过程应该在提供者之间循环,直到找到一个支持您选择的算法为止,我已经在它们的列表源中尝试了所有三个。
我知道这可能是我忽略的一件非常简单的事情,但我似乎无法理清。任何帮助都将不胜感激。下面的代码
-乔恩
代码:

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;
    }
}
5n0oy7gb

5n0oy7gb1#

独立使用问题

messagedigest示例不是线程安全的。文档中没有线程安全保证
请不要像这样使用messagedigest示例(除非您的控制器是请求范围)

假设

线程池由服务器使用
期望减少messagedigest对象创建的开销

可能的解决方案

创建 ThreadLocal 示例 MessageDigest 使用此计算摘要 ThreadLocal 示例
希望将来 Fiber s将尊重这种使用方式(如果不是,我们在java生态系统中有更大的问题)

建议

在有些情况下,线程是动态创建/销毁的,创建messagedigest的开销仍然很大:
管理一个单独的executor服务(使用threadpool),并使用futures管理摘要
或者为每个请求创建新的messagedigest示例(以避免不必要的threadlocal开销)。

相关问题