首页 > 编程语言 >java安全架构____Hmac秘钥加密自己的摘要数据

java安全架构____Hmac秘钥加密自己的摘要数据

时间:2023-09-13 12:32:56浏览次数:53  
标签:java String base64 秘钥 ____ key return byte public


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

import org.apache.commons.codec.binary.Base64;

/**
 * @author Administrator HMAC util
 */
public class HmacUtil {
	private static final String ALGORITHM_HMACMD5="HmacMD5";
	/**
	 * nothing about algorithm :HmacMD5,AES(128),DESede(168),HmacSHA1,HmacSHA256
	 * SecureRandom : use default config random user nextint
	 * encode : (byte to base64bytes)to String
	 * @return
	 */
	public static String init() {
		String key = "";
		try {
			KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM_HMACMD5);
			SecretKey secretKey=generator.generateKey();
			byte[]bytes=encode(secretKey.getEncoded());
			key=new String(bytes);
			System.out.println(key);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return key;
	}
	
	 /**  
     * USE HmacMD5 
     * @param plainText 
     * @param key  
     * @return  
     */    
    public static String HmacEncrypt(String plainText, String key) {           
		Mac mac = null;
		try {
			SecretKey secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM_HMACMD5);
			mac = Mac.getInstance(ALGORITHM_HMACMD5);
			mac.init(secretKey);
		} catch (Exception e) {
			e.printStackTrace();
		}
 		byte[] dataBytes =mac.doFinal(plainText.getBytes());
 		return new String(encode(dataBytes)); 
    }    
	
	/**
	 * base64 encode
	 * @param plainBytes
	 * @return  byte[]
	 */
	public static byte[] encode(byte[]plainBytes){
		Base64 base64=new Base64();
		return base64.encode(plainBytes);
	}
	/**
	 * base64 decode
	 * @param cipherText
	 * @return byte[]
	 */
	public static byte[] decode(byte[]cipherText){
		Base64 base64=new Base64();
		return base64.decode(cipherText);
	}     
	
	public static void main(String[] args) {
		String str="我是张三";
		System.out.println("明文信息:"+str);
		String key = init();
		System.out.println("生成的秘钥为__:"+key);
		String hmacKey=HmacEncrypt(str, key);
		System.out.println("用自己的秘钥做信息摘要__:"+hmacKey);
	}

//===================运行结果

明文信息:我是张三
MF8mW4etH60UzW8xELiCmMGN3gdgO+fFyW0Pivg8pD+pd8cB8Y2BYGSrCfOQAXvHbDMFkK1xfytkYERMq3bQYA==
生成的秘钥为__:MF8mW4etH60UzW8xELiCmMGN3gdgO+fFyW0Pivg8pD+pd8cB8Y2BYGSrCfOQAXvHbDMFkK1xfytkYERMq3bQYA==
用自己的秘钥做信息摘要__:REsuoeYttq8fSVfTe+iD4A==

标签:java,String,base64,秘钥,____,key,return,byte,public
From: https://blog.51cto.com/ratelcloud/7454364

相关文章

  • java安全架构____对称加密和非对称加密区别(对称秘钥,非对称秘钥)
    (一)对称加密(SymmetricCryptography)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secretkey),这种方法在密码学中叫做对称加密算法。对称加密通常使用的是相对较小的密钥,一般小于256bit。因为密钥越大,加密越强.例如AES,DES(二)......
  • Java安全架构____KeyGenerator(对称)秘钥生成工具详解
    packagecom.ryx.frame.security.aes;importjava.security.SecureRandom;importjava.util.Date;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importorg.apache.commons.codec.binary.Base64;publicclassKeyGeneral{ /** *AES128,256......
  • Xstream操作xml_The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is i
    //1.再使用xstream解析xml时发现总是报错Thetypeorg.xmlpull.v1.XmlPullParsercannotberesolved.Itisindirectlyreferencedfromrequired.classfiles//从bug中可以看出 XmlPullParser这个类为找打xstream需要依赖这个类从网上搜了一下这个类看看属于哪个jar包发现......
  • java安全架构____读取.cer证书文件的信息
    importjava.io.FileInputStream;importjava.security.cert.CertificateFactory;importjava.security.cert.X509Certificate;/***@authorGod*随便找一个.cer文件读取即可*/publicclassCertUtil{ /** *@authorGod *@cerPathJava读取Cer证书信息 *@th......
  • 列表和元组的概念和操作(1)
    通用序列列表元组字符串通用的序列操作索引:可以使用例如greeting='Hello'greeting[0]这种操作获取第一个元素切片:切片适用于提取序列中的一部分,例如number=[1,2,3,4,5,6]number[1:4],输出的结果为[2,3,4],第一个索引是包含的第一个元素的编号,但第二个索引是切片......
  • stm32f103移植lvgl
    这篇需做前期工作:https://www.cnblogs.com/njit-sam/p/17699205.htmlLVGL官方主页:https://lvgl.io/当你想快速上手时,点击这个:https://docs.lvgl.io/master/get-started/quick-overview.html这里,官方建议可以先在电脑上模拟,按照步骤一步步来就可以了,笔者选择的是CodeBlocks,配合......
  • 完美解决Server returned HTTP response code:403 for URL报错问题
    在调用某个接口的时候,突然就遇到了Server returned HTTP response code: 403 for URL报错这个报错,导致获取不到接口的数据,下面小编给大家分享解决Server returned HTTP response code:403 for URL报错问题,感兴趣的朋友一起看看吧 前言原因依赖post请求结语......
  • 关于小程序聊天框开发遇到的问题
    1.当输入框聚焦时,聊天框页面往上进行平移,导致页面难看解决:设置输入框input的这个属性为false2.设置上面为false时,定位在下面的输入框不进行上移解决:动态设置定位top值,设置获取焦点和失去焦点的方法//定位的样式:style="{'bottom':inputHeight+'px'}"//输入框的事件@focus......
  • reset | revert 使用场景:
    reset|revert使用场景:gitreset[commitId]||备注:此id对应修改会保留;reset后修改保留至本地,处于modified状态,若不提交,则服务器提交记录依然存在,若提交,可以将reset后的结果推送到服务器gitreset--hard[commitId]||备注:reset后本地所有修改均回退(注意是所有修......
  • IDEA 接口方法不能跳转到实体类实现方法的问题
    没有跳入到实体类实现方法的I+向下的箭头图标。极大可能是因为编辑器自带的代码高亮工具(Syntaxhighlighte)失效。解决方案第一种:清除缓存第二种:快捷键ctrl+alt+shift+h选择Syntax即可......