合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
sha256生成文件签名JAVA实现:
- private static final char[] HEX_DIGITS ={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
-
- /**
- * 计算sha256
- *
- * @param bytes 二进制数组
- * @return String
- */
- public static String digest(byte[] bytes) throws NoSuchAlgorithmException {
- MessageDigest messagedigest = MessageDigest.getInstance("SHA-256");
- messagedigest.update(bytes);
- return bufferToHex(messagedigest.digest());
- }
-
- /**
- * 计算二进制数据
- *
- * @param bytes 二进制数组
- * @return String
- */
- private static String bufferToHex(byte[] bytes) {
- return bufferToHex(bytes, 0, bytes.length);
- }
-
- /**
- * 计算二进制数据
- *
- * @param bytes 二进制数组
- * @param m 长度1
- * @param n 长度2
- * @return hex值
- */
- private static String bufferToHex(byte[] bytes, int m, int n) {
- StringBuffer stringBuffer = new StringBuffer(2 * n);
- int k = m + n;
- for (int l = m; l < k; l++) {
- appendHexPair(bytes[l], stringBuffer);
- }
- return stringBuffer.toString();
- }
-
- /**
- * 字符缓冲处理
- *
- * @param bt 字符
- * @param stringBuffer 字符串缓冲区
- */
- private static void appendHexPair(byte bt, StringBuffer stringBuffer) {
- char c0 = HEX_DIGITS[(bt & 0xf0) >> 4];
- char c1 = HEX_DIGITS[bt & 0xf];
- stringBuffer.append(c0);
- stringBuffer.append(c1);
- }
sha256生成文件签名Python实现:
- import sys
- import hashlib
-
- def sha256file(fpath, batch_size):
- with open(fpath, 'rb') as f:
- hash = hashlib.sha256()
- offset = 0
- for chunk in iter(lambda: f.read(batch_size), b''):
- if chunk != '':
- chunk_digest=sha256chunk(chunk)
- print 'offset:', offset, 'sha256:', chunk_digest
- offset += len(chunk)
- hash.update(chunk)
- return hash.hexdigest()
-
- def sha256chunk(buf):
- hash = hashlib.sha256()
- hash.update(buf)
- return hash.hexdigest()
-
- if __name__ == '__main__':
- if len(sys.argv) >= 2:
- digest = sha256file(sys.argv[1], 10*1024*1024)
- print 'file sha256:', digest
-