如何使用 BouncyCastle 计算消息摘要?

Mac*_*096 3 java hash bouncycastle

我目前正在玩 Java 和散列。

我在网上环顾四周时遇到了bouncycastle,我将它安装在我的 IDE 和所有东西中。

但是,如何使用此处找到的算法使用它来散列文本?(查找第 5.2 节算法)

我只想使用本节中定义的摘要算法:

GOST3411-MD2-MD4-MD5-RipeMD128-RipeMD160-RipeMD256-RipeMD320-SHA1-SHA-224-SHA-256-SHA-384-SHA-512-SHA3-224-SHA3-2586-SHA3-SHA2 Skein-256-* - Skein-512-* - Skein-1024-* - Tiger - Whirlpool

dev*_*rus 5

鉴于原始问题的澄清,我已经完全编辑了我的答案。要使用 SHA-512 摘要算法对字符串进行哈希处理,您需要向 JVM 注册 BouncyCastle,然后,您可以直接使用 Java API 或 BouncyCastle 类。

例如 Java API

// register the BouncyCastleProvider with the Security Manager
Security.addProvider(new BouncyCastleProvider());

String plainString = "Plaintext Secret";

MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
byte[] hashedString = messageDigest.digest(plainString.getBytes());

doSomething().with(hashedString);
Run Code Online (Sandbox Code Playgroud)

或者,您可以直接使用 BouncyCastle API,但如果可以的话,最好 (IMO) 使用 Java API 来实现可移植性。(如果您发现一个比 BouncyCastle 更好的库怎么办?令人怀疑,但您明白这一点。)

Security.addProvider(new BouncyCastleProvider());

String plainString = "Plaintext Secret";

// instantiate the BouncyCastle digest directly.
MessageDigest messageDigest = new SHA512Digest();
byte[] hashedString = messageDigest.digest(plainString.getBytes());

doSomething().with(hashedString);
Run Code Online (Sandbox Code Playgroud)

  • 好吧,看起来如果您只通过 Security.addProvider(new BouncyCastleProvider()); 添加 Bouncy Castle 提供程序,并调用 MessageDigest.getInstance("SHA-512"),则返回的实例将不是 Bouncy Castle 实现。由于 Sun 提供程序也支持 SHA-512 算法,并且由于它是提供程序列表中的第一个,因此将使用 Sun 实现。您需要调用 MessageDigest.getInstance("SHA-512", "BC") 来实际获取 Bouncy Castle 实现(或使用 Security.insertProviderAt(new BouncyCastleProvider(), 1) 在提供者列表中首先添加插入 Bouncy Castle 提供者. (3认同)