文档管理中心
我的
内容分发华为视频百花号Content Connect API算法介绍

算法介绍

sha256生成文件签名JAVA实现:

收起
自动换行
深色代码主题
复制
  1. private static final char[] HEX_DIGITS ={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
  2. /**
  3. * 计算sha256
  4. *
  5. * @param bytes 二进制数组
  6. * @return String
  7. */
  8. public static String digest(byte[] bytes) throws NoSuchAlgorithmException {
  9. MessageDigest messagedigest = MessageDigest.getInstance("SHA-256");
  10. messagedigest.update(bytes);
  11. return bufferToHex(messagedigest.digest());
  12. }
  13. /**
  14. * 计算二进制数据
  15. *
  16. * @param bytes 二进制数组
  17. * @return String
  18. */
  19. private static String bufferToHex(byte[] bytes) {
  20. return bufferToHex(bytes, 0, bytes.length);
  21. }
  22. /**
  23. * 计算二进制数据
  24. *
  25. * @param bytes 二进制数组
  26. * @param m 长度1
  27. * @param n 长度2
  28. * @return hex值
  29. */
  30. private static String bufferToHex(byte[] bytes, int m, int n) {
  31. StringBuffer stringBuffer = new StringBuffer(2 * n);
  32. int k = m + n;
  33. for (int l = m; l < k; l++) {
  34. appendHexPair(bytes[l], stringBuffer);
  35. }
  36. return stringBuffer.toString();
  37. }
  38. /**
  39. * 字符缓冲处理
  40. *
  41. * @param bt 字符
  42. * @param stringBuffer 字符串缓冲区
  43. */
  44. private static void appendHexPair(byte bt, StringBuffer stringBuffer) {
  45. char c0 = HEX_DIGITS[(bt & 0xf0) >> 4];
  46. char c1 = HEX_DIGITS[bt & 0xf];
  47. stringBuffer.append(c0);
  48. stringBuffer.append(c1);
  49. }

sha256生成文件签名Python实现:

收起
自动换行
深色代码主题
复制
  1. import sys
  2. import hashlib
  3. def sha256file(fpath, batch_size):
  4. with open(fpath, 'rb') as f:
  5. hash = hashlib.sha256()
  6. offset = 0
  7. for chunk in iter(lambda: f.read(batch_size), b''):
  8. if chunk != '':
  9. chunk_digest=sha256chunk(chunk)
  10. print 'offset:', offset, 'sha256:', chunk_digest
  11. offset += len(chunk)
  12. hash.update(chunk)
  13. return hash.hexdigest()
  14. def sha256chunk(buf):
  15. hash = hashlib.sha256()
  16. hash.update(buf)
  17. return hash.hexdigest()
  18. if __name__ == '__main__':
  19. if len(sys.argv) >= 2:
  20. digest = sha256file(sys.argv[1], 10*1024*1024)
  21. print 'file sha256:', digest