java 加密sha1_Java实现SHA1加密与MD5 明文32加密

MD5 和SHA-1 是目前使用比较广泛的散列(Hash)函数,也是在消息认证和数字签名中普遍使用的两种加密算法。本文基于AVR 高速嵌入式单片机,实现了MD5和SHA-1 两种加密算法的比较,并对算法进行了汇编语言的优化和改进。根据实验结果,对两种算法的优缺点进行了比较和分析。

由于MD5 与SHA-1均是从MD4 发展而来,它们的结构和强度等特性有很多相似之处,表(1)是对MD5 与SHA-1 的结构比较。SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32 比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5 是2128 数量级的操作,SHA-1 是2160 数量级的操作。产生具有相同摘要的两个报文的难度:MD5是 264 是数量级的操作,SHA-1 是280 数量级的操作。因而,SHA-1 对强行攻击的强度更大。但由于SHA-1 的循环步骤比MD5 多(80:64)且要处理的缓存大(160 比特:128 比特),SHA-1 的运行速度比MD5 慢。

/*

@param plainText

明文

@return 32位密文

*/

public String encryption(String plainText ) {

String re_md5 = new String();

try {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update( plainText.getBytes());

byte b [] = md .digest();

int i ;

StringBuffer buf = new StringBuffer();

for (int offset = 0; offset < b .length ; offset++) {

i = b[ offset];

if (i < 0)

i += 256;

if (i < 16)

buf.append( "0");

buf.append(Integer. toHexString(i));

}

re_md5 = buf.toString();

} catch (NoSuchAlgorithmException e ) {

e.printStackTrace();

}

return re_md5 ;

}

/**

SHA加密

@param str

@return

*/

public String getSha1(String str ) {

if (str == null || str.length() == 0) {

return null ;

}

char hexDigits [] = { '0' , '1' , '2' , '3' , '4', '5' , '6' , '7' , '8' , '9' ,

'a', 'b', 'c', 'd', 'e', 'f' };

try {

MessageDigest mdTemp = MessageDigest.getInstance("SHA1");

mdTemp.update( str.getBytes( "UTF-8"));

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 (Exception e ) {

return null ;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值