/**
* sha1算法摘要生成类
* @author LIUWEN276
*
*/
public class ShaOne {
private static Logger logger = LoggerFactory.getLogger(PvsnLogType.PVSN_COMMON.getLogName());
private static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
public static String getSha1(String str) {
if (null == str || 0 == str.length()) {
return null;
}
try {
MessageDigest mdTemp = MessageDigest.getInstance(PvsnConstants.ALGORITHM_SHA1);
mdTemp.update(str.getBytes(PvsnConstants.ENCODER_UTF8));
byte[] md = mdTemp.digest();
int j = md.length;
char[] buf = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}
return new String(buf);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* 对文件全文生成摘要
*
* @param file
* 要加密的文件
* @return sha1摘要码
*/
public static String getFileSha1(String path) {
File file = new File(path);
if (!file.exists()) {
logger.info("sha1加密摘要文件不存在,path={}", path);
return null;
}
FileInputStream fis = null;
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
logger.info("摘要长度:" + mdTemp.getDigestLength() * 2);
fis = new FileInputStream(file);
byte[] buffer = new byte[2048];
int length = -1;
logger.info("开始生成摘要");
long s = System.currentTimeMillis();
while ((length = fis.read(buffer)) != -1) {
mdTemp.update(buffer, 0, length);
}
logger.info("摘要生成成功,总用时: " + (System.currentTimeMillis() - s) + "ms");
byte[] md = mdTemp.digest();
int j = md.length;
char[] buf = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
//取byte0 高四位
buf[k++] = hexDigits[byte0 >>> 4 & 0xF];
//取byte0低四位
buf[k++] = hexDigits[byte0 & 0xF];
}
return new String(buf);
} catch (Exception ex) {
logger.error(ex.getMessage());
ex.printStackTrace();
return null;
} finally {
try {
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/*public static void main(String[] args) {
System.out.println(0xF);
* String str = getSha1("werjkewrkew"); System.out.println(str);
* System.out.println(str.length());
String path = "D:/shareFile/zip/CCF_20140807_2000386956.zip";
String str = getFileSha1(path);
System.out.println(str);
System.out.println(str.length());
}*/
}