前言:

  工作需要,对接华为云应用市场的 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;

最新文章

  1. 雪峰配置的nginx
  2. ubuntu 环境变量修改和恢复总结[收藏]
  3. MongoVUE 如何导出数据
  4. mac 学习
  5. 第10条:始终要覆盖toString
  6. C语言中结构体对齐问题
  7. 工厂模式 - 程序实现(java)
  8. 一元云购完整源码 云购CMS系统 带安卓和ios手机客户端
  9. King&#39;s Quest - poj 1904(强连通分量+外挂输入输出)
  10. 【Linux】CentOS系统
  11. Haskell 笔记(三)类型系统
  12. 6.Hibernate单向的多对一 关联映射
  13. The Wall (medium)
  14. JS数组(JSON)整合篇-方法整理
  15. 在Bootstrap开发框架中使用dataTable直接录入表格行数据(2)--- 控件数据源绑定
  16. 接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63
  17. python学习第四次笔记
  18. SQL_sql语言的学习
  19. Hibernate学习笔记一:项目创建与基本配置文件
  20. 【转载】【JAVA秒会技术之图片上传】基于Nginx及FastDFS,完成图片的上传及展示

热门文章

  1. 使用 Task 简化异步编程
  2. Java中Map用法详解
  3. Python 新手常犯错误(第一部分)转载
  4. php 单线程 (http://bbs.csdn.net/topics/390778072)
  5. PKU 1094 Sorting It All Out(拓扑排序)
  6. 什么是“HTML”?HTML的“标记”是什么?
  7. 分布式存储系统 Ceph
  8. 对称加密与非对称加密,以及RSA的原理
  9. LeetCode (226):Invert Binary Tree 递归实现
  10. Hive架构