首页 > 编程语言 >SHA加密算法

SHA加密算法

时间:2024-09-14 09:47:16浏览次数:9  
标签:String uppercase SHA static str 512 加密算法

SHA简介

安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。
  目前SHA有五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布,也是美国的政府标准,后四者有时并称为SHA-2。

SHA家族特点

Sha-1 Sha-224 Sha-256 Sha-384 Sha-512
消息摘要长度 160 224 256 384 512
消息长度 264 264 264 264 2128
字长度 32 32 32 32 64
分组长度 512 512 512 1024 1024
步骤数 80 64 64 80 80

工具类

package com.dbl.util;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @Author 高国鹏
 * @Create 2024/7/4 13:17
 * Description: SHA 系列算法加密工具类
 */
public class SHAUtil {

    private static final String SHA_1 = "SHA-1";
    private static final String SHA_224 = "SHA-224";
    private static final String SHA_256 = "SHA-256";
    private static final String SHA_384 = "SHA-384";
    private static final String SHA_512 = "SHA-512";

    public static String getSHA1(String str, boolean uppercase) {
        return getSHA(str, SHA_1, uppercase);
    }

    public static String getSHA224(String str, boolean uppercase) {
        return getSHA(str, SHA_224, uppercase);
    }

    public static String getSHA256(String str, boolean uppercase) {
        return getSHA(str, SHA_256, uppercase);
    }

    public static String getSHA384(String str, boolean uppercase) {
        return getSHA(str, SHA_384, uppercase);
    }

    public static String getSHA512(String str, boolean uppercase) {
        return getSHA(str, SHA_512, uppercase);
    }

    /**
     * 利用Java原生摘要实现SHA加密(支持大小写,默认小写)
     *
     * @param str       要加密的数据
     * @param algorithm 要使用的算法(SHA-1,SHA-2224,SHA-256,SHA-384,SHA-512)
     * @param uppercase 是否转为大写
     * @return
     */
    private static String getSHA(String str, String algorithm, boolean uppercase) {
        byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
        MessageDigest messageDigest;
        try {
            //获得SHA转换器
            messageDigest = MessageDigest.getInstance(algorithm);
            //bytes是输入字符串转换得到的字节数组
            messageDigest.update(bytes);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("SHA签名过程中出现错误,算法异常");
        }
        //转换并返回结果,也是字节数组,包含16个元素
        byte[] digest = messageDigest.digest();
        //字符数组转换成字符串返回
        String result = byteArrayToHexString(digest);
        //转换大写
        return uppercase ? result.toUpperCase() : result;

    }


    /**
     * 将字节数组转为16进制字符串
     *
     * @param bytes 要转换的字节数组
     * @return
     */
    private static String byteArrayToHexString(byte[] bytes) {
        StringBuilder builder = new StringBuilder();
        for (byte b : bytes) {
            //java.lang.Integer.toHexString() 方法的参数是int(32位)类型,
            //如果输入一个byte(8位)类型的数字,这个方法会把这个数字的高24为也看作有效位,就会出现错误
            //如果使用& 0XFF操作,可以把高24位置0以避免这样错误
            String temp = Integer.toHexString(b & 0xFF);
            if (temp.length() == 1) {
                //1得到一位的进行补0操作
                builder.append("0");
            }
            builder.append(temp);
        }
        return builder.toString();
    }

}

标签:String,uppercase,SHA,static,str,512,加密算法
From: https://www.cnblogs.com/Gguopeng/p/18413362

相关文章

  • MD5加密算法
    MD5简介MD5算法是单向散列算法的一种。单向散列算法也称为HASH算法,是一种将任意长度的信息压缩至某一固定长度(称之为消息摘要)的函数(该压缩过程不可逆)。在MD5算法中,这个摘要是指将任意数据映射成一个128位长的摘要信息。并且其是不可逆的,即从摘要信息无法反向推演中原文,在演算过......
  • ThreeJS Shader的效果样例光影墙、扩散面(四)
    一、实现一个光影墙1. 根据自定义坐标点,输出一个光影墙/***添加光影墙*/functionaddLightWall(){constgeometry=newTHREE.BufferGeometry();constvertices=newFloat32Array([5,0,2,3,0,5,-2,0,5,-4,0,2,-4,......
  • nvm下载node版本Could not retrieve https://nodejs.org/dist/latest/SHASUMS256.txt.
    1.使用nvm安装node版本的时候报错Couldnotretrievehttps://nodejs.org/dist/latest/SHASUMS256.txt.Get"https://nodejs.org/dist/latest/SHASUMS256.txt":dialtcp104.20.22.46:443:i/otimeout原因:可能是远程连接被关闭的问题,这是由于国内网络限制导致的,解决办法:找到sett......
  • Python 和 Go 实现 AES 加密算法的技术详解
    AES(AdvancedEncryptionStandard,高级加密标准)是一种对称密钥加密算法,广泛应用于各种安全通信场景中。AES使用128、192或256位的密钥,能够提供不同级别的安全性。本文将详细讲解如何使用Python和Go来实现AES加密算法,提供代码示例并对其进行逐步解析。1.什么是AES加密......
  • shardingJdbc分表执行批量update不支持的解决方式
    引言本次场景,公司通过shardingjdbc对mysql数据库进行分表,模糊匹配按照createTime,每季度一张表的方式,精确匹配按照creatTime的方式。关于模糊匹配、精确匹配,自行在shardingjdbc官网查看,分表策略等。由于是跟进createTime字段去作为分表的key,那么在执行select、update、delete......
  • ITextSharp 搜索关键字定位【转】
      #regionIText模块privateclassMyRenderListener:IRenderListener{publicvoidBeginTextBlock(){}publicvoidEndTextBlock(){}publicvoidRenderImage(ImageRenderInforenderInfo){}......
  • GtkSharp 获取触摸宽度高度面积尺寸信息
    本文将告诉大家如何在C#dotnet里面,从GTK里面获取到触摸的宽度高度信息,即触摸面积或触摸尺寸信息准确来说本文的方法是我在lsj的帮助下试出来的,我没有找到正式的文档对此有描述。本文测试的机器是在UOS系统搭配兆芯的CPU的机器上,这台机器采用的是希沃的某款触摸框的设......
  • shader 案例学习笔记之绘制圆
    环境搭建:参考glslvscode环境搭建先上代码#ifdefGL_ESprecisionmediumpfloat;#endifuniformvec2u_resolution;voidmain(){vec2st=gl_FragCoord.xy/u_resolution.xy;st-=0.5;st.x*=u_resolution.x/u_resolution.y;floatr=length(st);......
  • Python 加密算法详解与应用
    引言随着互联网的普及,数据传输与存储中的安全性问题变得尤为重要。加密算法是一种有效保护数据的方法,广泛应用于文件加密、网络通信以及身份认证等场景中。Python作为一种易于上手且功能强大的编程语言,提供了多种加密库供开发者使用,如cryptography、pycryptodome等库。本篇文章将详......
  • WPF Shape系列控件的详细使用教程
    WPF(WindowsPresentationFoundation)中的Shape控件提供了一系列用于绘制几何形状的元素,如线条、矩形、椭圆、多边形等。这些控件继承自System.Windows.Shapes.Shape基类,具有一致的属性和行为,允许开发者轻松地在应用程序中创建丰富的图形界面。本文将详细介绍WPF中的......