java - Java 中的 openssl 命令

标签 java openssl sha1

我必须在我的 java 应用程序中运行此命令:

openssl dgst -sha1 -sign file.pem -out output.sha1 input.txt 
openssl enc -base64 -in output.sha1 -out output2.b64 -A

是否有任何库可以帮助我在我的 java 服务器中运行此代码?

最佳答案

看起来您只是想用正确的 SHA1 加密字符串? Java 已经提供了用于此目的的软件包,而无需使用 OpenSSL。

看看以下函数:

public static byte[] encrypt(String x) throws Exception {
      java.security.MessageDigest digest = null;
      digest = java.security.MessageDigest.getInstance("SHA-1");

      digest.reset();

      digest.update(x.getBytes("UTF-8"));

      return digest.digest();
 }

从现在起,您可以对它进行 Base64 编码,或者您想对输出执行任何其他操作。

--编辑,包括使用 key 进行散列

private String sha1(String s, String keyString) throws   UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {

    SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), "HmacSHA1");
    Mac mac = Mac.getInstance("HmacSHA1");
    mac.init(key);

    byte[] bytes = mac.doFinal(s.getBytes("UTF-8"));

    return new String( Base64.encodeBase64(bytes));

    }

关于java - Java 中的 openssl 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654091/

相关文章:

php - Node.js:如何破译用 php 加密的文本?

c# - 如何在不读取同一个文件两次的情况下计算两个哈希值?

java - SHA-1 在 UTF-8 Java 中显示不同的输出

c - 清除 OpenSSL secret 的正确方法是什么?

使用 rsa evp 对数据进行签名的 c++ 代码

tsql - 我想得到一个二进制值的十六进制值,从中删除 0x

java - 取消 CountDownTimer Android Java

java - 小程序 Servlet 通信

java - 气泡插件不起作用

java - 如何使用 driver.findElement 来定位具有以下 XML 的元素?