【Java小工匠聊密码学】--消息摘要--RIPEMD算法
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()); } }
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【小工匠技术圈】
个人公众号,欢迎关注,查阅更多精彩历史!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
解决java.lang.IllegalArgumentException: 'Content-Type' cannot contain wi...
FastJson版本升级 这个bug的产生很大程度上是因为你更新了FastJson的版本。 一、看一下这个Bug org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: 'Content-Type' cannot contain wildcard type '*' at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877) ~[spring-webmvc-5.0.7.RELEASE....
- 下一篇
【Java小工匠聊密码学】--消息摘要--SHA3算法
1、SHA3概述 1.1 SHA3简介 由于近年来对传统常用Hash 函数如MD4、MD5、SHA0、SHA1、RIPENMD 等的成功攻击,美国国家标准技术研究所(NIST)在2005年、2006年分别举行了2届密码Hash 研讨会;同时于2007年正式宣布在全球范围内征集新的下一代密码Hash算法,举行SHA-3竞赛·新的Hash算法将被称为SHA-3,并且作为新的安全Hash标准,增强现有的FIPS 180-2标准。算法提交已于2008年10月结束,NIST 将分别于2009年和2010年举行2轮会议,通过2轮的筛选选出进入最终轮(final round)的算法,最后将在2012年公布获胜算法。公开竞赛的整个进程仿照高级加密标准AES 的征集过程。2012年10月2日,Keccak被选为NIST竞赛的胜利者, 成为SHA-3.。 1.2 SHA3作者 Keccak算法由意法[半导体] 的Guido Bertoni、Joan Daemen(AES算法合作者)和Gilles Van Assche,以及恩智浦半导体的Michaël Peeters联合开发。NIST计算机安全专家Tim ...
相关文章
文章评论
共有0条评论来说两句吧...