1、什么是RIPEMD
RIPEMD(RACE Integrity Primitives Evaluation Message Digest,RACE原始完整性校验消息摘要,是Hans Dobbertin等3人在md4,md5的基础上,于1996年提出来的。算法共有4个标准128、160、256和320,其对应输出长度分别为16字节、20字节、32字节和40字节。不过,让人难以致信的是RIPEMD的设计者们根本就没有真正设计256和320位这2种标准,他们只是在128位和160位的基础上,修改了初始参数和s-box来达到输出为256和320位的目的。所以,256位的强度和128相当,而320位的强度和160位相当。RIPEMD建立在md的基础之上,所以,其添加数据的方式和md5完全一样。
2、RIPEMD 应用案例
比特币在生成地址算法中,使用了该算法。
3、RIPEMD算法实现
package lzf.cipher.bc;
import java.nio.charset.Charset;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.RIPEMD128Digest;
import org.bouncycastle.crypto.digests.RIPEMD160Digest;
import org.bouncycastle.crypto.digests.RIPEMD256Digest;
import org.bouncycastle.crypto.digests.RIPEMD320Digest;
import org.bouncycastle.util.encoders.Hex;
/**
* @author Java小工匠
*/
public class BCRIPEMDUtils {
public static String ripemd128(byte[] bytes) {
Digest digest = new RIPEMD128Digest();
digest.update(bytes, 0, bytes.length);
byte[] rsData = new byte[digest.getDigestSize()];
digest.doFinal(rsData, 0);
return Hex.toHexString(rsData);
}
public static String ripemd160(byte[] bytes) {
Digest digest = new RIPEMD160Digest();
digest.update(bytes, 0, bytes.length);
byte[] rsData = new byte[digest.getDigestSize()];
digest.doFinal(rsData, 0);
return Hex.toHexString(rsData);
}
public static String ripemd256(byte[] bytes) {
Digest digest = new RIPEMD256Digest();
digest.update(bytes, 0, bytes.length);
byte[] rsData = new byte[digest.getDigestSize()];
digest.doFinal(rsData, 0);
return Hex.toHexString(rsData);
}
public static String ripemd320(byte[] bytes) {
Digest digest = new RIPEMD320Digest();
digest.update(bytes, 0, bytes.length);
byte[] rsData = new byte[digest.getDigestSize()];
digest.doFinal(rsData, 0);
return Hex.toHexString(rsData);
}
public static void main(String[] args) {
byte[] bytes = "java小工匠".getBytes(Charset.forName("UTF-8"));
String ripemd128 = ripemd128(bytes);
System.out.println("ripemd128:" + ripemd128 + ",lengh=" + ripemd128.length());
String ripemd160 = ripemd160(bytes);
System.out.println("ripemd160:" + ripemd160 + ",lengh=" + ripemd160.length());
String ripemd256 = ripemd256(bytes);
System.out.println("ripemd256:" + ripemd256 + ",lengh=" + ripemd256.length());
String ripemd320 = ripemd320(bytes);
System.out.println("ripemd320:" + ripemd320 + ",lengh=" + ripemd320.length());
}
}
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【小工匠技术圈】
个人公众号,欢迎关注,查阅更多精彩历史!
image