工具类-------计算两个字符串的hash值,并将两个hash值拼接后计算出一个hash值输出。(springboot框架下)

开发任务二:

计算两个字符的hash值工具类,输入项为(string1,string2,hashAlgorithm),根据hash算法计算string1string2hash值,再将两个hash值拼接后再计算出一个hash值输出。 hashAlgorithm名为配置文件可配。

        这是师傅给我的第二个开发任务,比较简单,在网上找了很久,计算hash值的实例并不多。

以下为开发代码:

工具类:

package com.xdja.timingDemo.utility;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;


import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

@Component
@PropertySource(value = {"classpath:param.properties"},ignoreResourceNotFound=true)//获取配置文件中的hashAlgorithm
public class HashCode {

    @Value("${hashAlgorithm}")
    private  String algorithm;


    public  void getHashCode( String s1, String s2) throws NoSuchAlgorithmException {

        //扩展支持的算法
        Security.addProvider(new BouncyCastleProvider());

        System.out.println("-----------------------获取的hashAlgorithm是:"+algorithm);

        String hashAlgorithm = algorithm;

        //s1字符串的hasncode
        String resultStr1  = getDigestResult(s1,hashAlgorithm);

        //s2字符串的hasncode
        String resultStr2  = getDigestResult(s2,hashAlgorithm);

        //两个hashcode拼接字符串s3
        String s3 = resultStr1 + resultStr2;

        //s3的hashcode
        String resultStr3  = getDigestResult(s3,hashAlgorithm);

        System.out.println("---------------分割线------------------------");
        System.out.println("s1的hashcode为:"+resultStr1);
        System.out.println("---------------------------------------------");
        System.out.println("s2的hashcode为:"+resultStr2);
        System.out.println("---------------------------------------------");
        /*System.out.println("s1+s2="+s3);*/
        System.out.println("拼接s1+s2的hashcode为:"+resultStr3);
        System.out.println("hashcode长度为:"+resultStr3.length());

    }

    private String getDigestResult(String str, String hashAlgorithm){

        MessageDigest mDigest = null;
        try {
            mDigest = MessageDigest.getInstance(hashAlgorithm);
        } catch (NoSuchAlgorithmException e) {
            System.out.println("系统算法不支持将默认为MD5!");
            try {
                mDigest = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        mDigest.update(str.getBytes());
        BigInteger bigInt = new BigInteger(1, mDigest.digest());
        String resultStr = bigInt.toString(16);
        return resultStr;
    }

}

测试类:

package com.xdja.timingDemo.controller;

import com.xdja.timingDemo.utility.HashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.NoSuchAlgorithmException;

    @RestController
    public class TestHashCode {

        @Autowired
        HashCode hashCode;
        @GetMapping(value = "cert/getHashCode")
        public void getHashCode(){

            try {
                hashCode.getHashCode("abcdEFG","efgabcd");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }


        }

    }

 param.properties:

hashAlgorithm=MD5

//hashAlgorithm=SHA-1

运行springboot的主类Application.java启动项目,在浏览器中输入http://localhost:8082/cert/getHashCode得到结果。

控制台:

参考官方文档:https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest

MessageDigest支持的算法有限,如下图:

在方法首行加上:

Security.addProvider(new BouncyCastleProvider());

基本可以实现所有hash算法,比如 Tiger、MD4等。

本次开发使用的框架为SpringBoot,部分配置延用上一个任务,即上一篇博客https://blog.csdn.net/weixin_42209368/article/details/87713631 

至此,小任务完成。如有其他更好的方法,请指教!!!

 

猜你喜欢

转载自blog.csdn.net/weixin_42209368/article/details/87798538