客户需求:
sign文件签名生成方法为:首先计算文件的MD5校验和,然后对校验和做base64转码,将base64转码的结果放到sign文件中。
MD5校验和使用Linux操作系统自带的 md5sum 命令生成,Java中使用Runtime.getRuntime().exec()方法,可以调用Linux系统函数
Base64转码使用python2.6.6 中base模块的b64encode方法生成,Java中可以使用java.util.Base64.Encoder类中encodeToString的方法生成
Apache的commons-codec-1.4.jar
package com.cslo.common.utils; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; /** * * Copyright (c) 2017, * All rights reserved. * 文件名称: md5.java * 作 者: yxl 2017年12月20日 * 创建时间: 2017年12月20日 * 功能说明:对文件进行MD5算法处理,然后base64编码 */ public class MD5Utils{ public static String getDigest(String dir) throws NoSuchAlgorithmException, IOException { @SuppressWarnings("resource") FileInputStream is = new FileInputStream(dir); MessageDigest md = MessageDigest.getInstance("MD5"); md.reset(); byte[] bytes = new byte[2048]; int numBytes; while ((numBytes = is.read(bytes)) != -1) { md.update(bytes, 0, numBytes); } byte[] digest = md.digest(); String result = new String(Hex.encodeHex(digest)); result=Base64.encodeBase64String(result.getBytes()); return result; } public static void main(String[] args) throws NoSuchAlgorithmException, FileNotFoundException, IOException { String dir = "C:/Users/yxl/Desktop/ftp/合作机构FTP文件示例/win/JZ_WIN_20171106_190000_191000_1_1.data"; String digest = getDigest(dir); System.out.println(digest); } }
结果:
NmVjNTcyMTNlMjY5ZWRjYzQ2YjU4OWNkMTJlZmE5ZjY=