首页 > 编程语言 >java安全架构____java HMAC加密

java安全架构____java HMAC加密

时间:2023-09-13 15:35:19浏览次数:38  
标签:return String bytes ____ static key import java HMAC


package com.security.hmac;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * @author Administrator
 * hmac加密
 */
public class Hmac {
	private final static String KEY_MAC = "HmacMD5";

	/**
	 * 全局数组
	 */
	private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

	/**
	 * 测试方法
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		String key = Hmac.init();
		System.out.println("Mac密钥___:" + key);
		String generalStr = "123456";
		System.out.println(hmacEncode(key,generalStr));
	}
	/**
	 * 初始化HMAC密钥
	 * 转十六进制的字符串秘钥太他妈长 主要说明个意思
	 * 基本都选用base编码一下 在解码
	 * @return
	 */
	public static String init() {
		String key="";
		try {
			KeyGenerator generator = KeyGenerator.getInstance(KEY_MAC);
			SecretKey secretKey= generator.generateKey();
			key = bytesToHexString(secretKey.getEncoded());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return key;
	}

	/**
	 * hmac 加密
	 * @param key hmac秘钥
	 * @param generalStr 明文
	 * @return
	 */
	public static String hmacEncode(String key,String generalStr){
		String hmacStr="";
		try {
			SecretKey secretKey=new SecretKeySpec(key.getBytes("UTF-8"), KEY_MAC); 
			Mac mac=Mac.getInstance(secretKey.getAlgorithm());
			mac.init(secretKey);
			byte[]bytes=generalStr.getBytes("UTF-8");
			hmacStr=bytesToHexString(mac.doFinal(bytes));
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return hmacStr;
	}
	/**
	 * 转换字节数组为十六进制字符串
	 * @param bytes字节数组
	 * @return 十六进制字符串
	 */
	@SuppressWarnings("unused")
	private static String bytesToHexString(byte[] bytes) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < bytes.length; i++) {
			int ret = bytes[i];
			if (ret < 0) {
				ret += 256;
			}
			int n  = ret % 16;
			int m = ret / 16;
			sb.append(hexDigits[m] + hexDigits[n]);
		}
		return sb.toString();
	}
}


//运行结果

java安全架构____java HMAC加密_java

//摘要后对比

java安全架构____java HMAC加密_Mac_02


标签:return,String,bytes,____,static,key,import,java,HMAC
From: https://blog.51cto.com/ratelcloud/7455536

相关文章

  • java安全架构____java SHA加密
    packagecom.security.sha;importjava.security.MessageDigest;/***@authorAdministrator*sha加密推荐先*/publicclassSha{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("简单的sha加密__:"+shaEncode("12345......
  • (随笔)记录MP update()无法置空字段的问题
    问题在code编写的时候有遇到需求,即保存或更新操作之前需要对reason和medication_receipt字段进行清空操作,确保一条数据中这两个字段不能同时有值,由于是Springboot+MybatpisPlus的框架,因此第一反应是通过mp的update方法进行更新操作。for(FollowupPapRecordDetailfollowupPapR......
  • java安全架构____java MD5加密
    packagecom.security.md5;importjava.security.MessageDigest;/***@authormd5**/publicclassMd5{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("简单md5加密____:"+md5Encode("123456")); //避免不同......
  • dubbo分布式项目开发____配置经验和心得
    //1.zookeeper配置文件中不要出现中文会报错 //2.分布式开发对象一定要序列化//摘抄如下在面向对象程序语言中做分布式计算的时候,经常需要将对象在不同的主机之间传输,我这次在实现分布式计算的时候,需要将一个计算对象从中央服务器Server分发给所有的客户端client。通过......
  • Flask基础入门到精通之flask准备和路由
    一、前言Flask诞生于2010年,是Arminronacher(阿明·罗纳彻)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如......
  • dubbo分布式项目开发____dubbo控制台管理
    //1.将dubbo-admin放到tomcat下自行解压修改dubbo.properties文件结构如下为了避免冲突如用到多个tomcat时修改端口号即可8080  其他8081...2..3..4等//从命名下war包的名称不带版本号放到tomcat下解压出来的就不带版本号了//启动tomcat访问这个项目我个人用的是8081单独......
  • 《VUE》走马灯组件
    <template><!--走马灯--><divclass="box"><divclass="carousel"><divclass="item"v-for="(v,i)inlist":key="i"@click="open(v)"><img:sr......
  • dubbo分布式项目开发____dubbo服务调用开发
    //创建工程名 cnse-customer-user导入jar包 //工程结构//spring文件配置<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ......
  • git 回撤操作
    背景:同一个分支上,比如做了10个功能,有10次提交记录,但是产品突然说后面的五个功能不要了解决方案:git的revert命令。gitrevert命令的含义gitrevertcommitId1.表示撤销某个提交,并不是说撤销至某个提交。举个例子:新增1.txt文件进行第一次提交,新增2.txt文件进行第二次提交;此时......
  • dubbo分布式项目开发____dubbo服务接口开发
    //1.创建服务提供者工程名 cnse-provider-user //2.导入jar包和创建工程包名//配置spring的xml文件<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i......