当前位置:   article > 正文

java.security.NoSuchAlgorithmException: Algorithm HmacSHA256 not available_integrity check failed: java.security.nosuchalgori

integrity check failed: java.security.nosuchalgorithmexception: algorithm hm

java.security.NoSuchAlgorithmException: Algorithm HmacSHA256 not available问题解决

公司使用minio进行文件上传,但是minio底层使用的HmacSHA256 这个算法,我的jar包在本地windows运行是没有任何问题的,放在linux运行就会出现这个错误。

  1. 查看jar包应用是否使用的linux环境的jdk
    添加
System.out.println(System.getProperty("java.version"));
  • 1

输出查看结果,看看应用程序的版本是否和linux的java -version版本一致,如果不一致就要让环境一致了,可以替换linux的jdk版本和本地一致,这个算法在jdk1.8+是默认支持的。
2. 如果一致的情况下,那就可能是jdk少包了,在linux环境添加
HmacSHA256Test.java文件,里面代码如下


import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.*;
public class HmacSHA256Test {
    public static void main(String[] args) {
        try {

            System.out.println(System.getProperty("java.version"));

            Key key = new SecretKeySpec("test".getBytes(), "HmacSHA256");
            Mac.getInstance("HmacSHA256").init(key);
            System.out.println("Success!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

使用 javac HmacSHA256Test.java编译文件,在使用java HmacSHA256Test运行查看是否输出success。如果不能输出success,就需要在jre里面添加security包了,具体可以百度,我这里是能输出的。
3.如果输出success,那就可能是jar包的算法指向有问题了,我们可以添加一个Bouncy Castle扩展包,在pom.xml文件加依赖

     <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.68</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

在springboot启动方法中添加代码进行指定
Security.addProvider(new BouncyCastleProvider());

        public static void main(String[] args) {
        Security.addProvider(new BouncyCastleProvider());
        SpringApplication.run(abs.class, args);
    }
  • 1
  • 2
  • 3
  • 4

我到这一步基本就解决问题了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/570632
推荐阅读
相关标签
  

闽ICP备14008679号