前言:

  工作需要,对接华为云应用市场的 API 接口,由于维护团队都是 .NET 所以用 .NET 来开发。

  简单了解一下 SHA256 加密算法,本质就是一个 Hash,与 MD5 相比就是计算量大一些,具体的没时间细化。

一、Java SHA256 加密算法实现代码  (最终以 Base64 方式进行签名验证)

 /**
*
* hamcSHA256加密算法
* @param macKey 秘钥key
* @param macData 加密内容-响应消息体
* @return 加密密文
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
* @throws IllegalStateException
* @throws UnsupportedEncodingException
*/
public static byte[] hmacSHA256(String macKey, String macData) throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException, UnsupportedEncodingException { SecretKeySpec secret = new SecretKeySpec(macKey.getBytes(), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(secret); byte[] doFinal = mac.doFinal(macData.getBytes("UTF-8"));
return doFinal;
}
 /**
*
* 字节数组转字符串
* @param bytes 字节数组
* @return 字符串
*/
public static String base_64(byte[] bytes)
{
return new String(Base64.encodeBase64(bytes));
}

二、.NET SHA256 加密算法实现代码

/// <summary>
/// hamcSHA256加密实现
/// </summary>
/// <returns>The token.</returns>
/// <param name="secret">Secret.</param>
/// <param name="message">Message.</param>
public static string CreateToken(string secret, string message)
{
var encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(secret);
// 注意:如果是中文注意转换编码格式
byte[] messageBytes = encoding.GetBytes(message);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
// 注意:Java (u127)与.NET byte(255) 存储方式不同,所以需要转换一下。
sbyte[] sb = new sbyte[hashmessage.Length];
for (int i = ; i < hashmessage.Length; i++) {
sb[i] = hashmessage[i] < ? (sbyte)hashmessage[i] : (sbyte)(hashmessage[i] - );
} byte[] unsignedByteArray = (byte[])(Array)sb;
return Convert.ToBase64String(unsignedByteArray);
}
}

问题总结:

  1、转 byte[] 数组,注意编码格式;

  2、Java 中的 byte 与 .NET 中的 byte 存储方式不同,Java 是 -127~127、.NET 是 0~2555

  3、转换 Base64 同样,如果不进行转换结果会不一致,采用 sbyte[] 进行一轮转换再 Base64;

Java SHA256/Base64转.NET(C#)实现---(华为云云市场.NET版本加密方式)的更多相关文章

  1. C#、Java和JS实现SHA256+BASE64加密总结

    C#.Java和JS实现SHA256+BASE64加密总结 --莫非(www.muphy.me) 原理 首先,通过编码格式(UTF-8.ASCII等,如果含有汉字等字符,编码格式不同加密结果也不同)获 ...

  2. Java实现BASE64编解码

    Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...

  3. Java实现BASE64编解码器

    Java实现BASE64编解码器 笔者:chszs,转载注明.博客首页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...

  4. java安全——BASE64

    这个主题主要是关于java安全的,应该来说算是个大杂烩吧,但是又不缺乏实用性,算是作为一个总结,用的时候可以作为参考. 1.使用BASE64加解密 在java加密技术中,BASE64算是一种最简单.最 ...

  5. java中Base64的加密工具封装

    Base64加密作为最简单普遍的加密方式(其实只能称为编码方式),应用场景众多比如秘钥,安全证书,也应用在其他的加密方式中或与其他加密方式进行嵌套使用 可以通过引用sun.misc来使用,也可以自己手 ...

  6. Java实现Base64加密

    阅读本文约“2.5分钟” Java加解密系列,介绍Java加密解密的基础知识,并使用Base64算法实现加解密. 对于加密在企业中是非常常见的,就如邮件的传输,每个企业都会有自己设置安全方式,设置加密 ...

  7. java.util.base64报错解决

    java.util.Base64 这个类,它是在 JDK 1.8 的时候加入的,之前版本的标准库没有这个类. eclipse更换jdk1.8就可以了了.

  8. java基础---->Base64算法的使用

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...

  9. Java进行Base64的编码(Encode)与解码(Decode)

    关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...

随机推荐

  1. android 带RadioButton的Dialog

    package com.example.dialog3; import android.os.Bundle;import android.app.Activity;import android.app ...

  2. Godaddy域名因为whois信息虚假被暂时关闭

    如果你收到来自 Godadddy 通过 invalidwhois@godaddy.com 发出的标题为如下内容的邮件: [Incident ID: xxxx] xxxx - DS Invalid Wh ...

  3. [C语言]删除用户自定义后缀名的所有文件

    环境:win7 IDE:DEV-C++ 编译器:GCC 编译结果:Success 运行结果:Success 使用说明: 1.输入需要查询的目录,比如e: 2.输入需要删除的后缀名:比如:txt 注意: ...

  4. PHPCMS新闻内容调用方法介绍

    {template "content","header"} ---------- 调用根目录下phpcms\template\content\header文件 ...

  5. 150. Evaluate Reverse Polish Notation(逆波兰表达式)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  6. win下安装wget以及使用wget

    1. 安装wget网址:http://gnuwin32.sourceforge.net/packages/wget.htm下载http://downloads.sourceforge.net/gnuw ...

  7. Optimal Marks SPOJ - OPTM (按位枚举-最小割)

    题意:给一张无向图,每个点有其点权,边(i,j)的cost是\(val_i\ XOR \ val_j\).现在只给出K个点的权值,求如何安排其余的点,使总花费最小. 分析:题目保证权值不超过32位整型 ...

  8. TOSCA自动化测试工具安装

    1.下载链接 https://www.tricentis.com/software-testing-tools/ 2.免费试用14天, 弹出的页面输入邮箱地址--> 输入一堆信息-->点击 ...

  9. idea Jetty deployment

    idea 配置好jetty server后,先执行此操作 mvn install(该操作后才会有war包,jar包之类的),再debug或run之类的操作,不然一直404

  10. Elasticsearch、MongoDB、Hadoop适用场景

    如果你仅仅想要通过关键字和简单的分析,那么Elasticsearch可以完成任务: 如果你需要查询文档,并且包含更加复杂的分析过程,那么MongoDB相当适合: 如果你有一个海量的数据,需要大量不同的 ...