标签: jce

(1)转换ECDSA私钥和公钥,(2)ECDSA验证

接下来的讨论是一个简单的教程,如何在 java 中使用 ECDSA 算法对字符串进行签名,而不使用任何第三方库。但问题是:

  1. 如何将公钥和私钥转换为字符串?(因为我想将它们发送到数据库中)。
  2. 有人可以帮我创建一个简单的教程,介绍如何在 java 中使用 ECDSA 算法来验证消息吗?此时我需要包含签名和公钥作为验证方法。

这是我的 java 代码中的场景,假设有发送方和接收方:

  • 发送端
package sender;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
public class Sign {    
  public static void main(String[] args) throws Exception {
      /*
       * Generate a key pair
       */
      KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
      SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

      keyGen.initialize(256, random);

      KeyPair pair = keyGen.generateKeyPair();
        
      /*
      Generate the private and the public key
      */

      PrivateKey priv = pair.getPrivate();
      /* …
Run Code Online (Sandbox Code Playgroud)

java cryptography jce digital-signature ecdsa

2
推荐指数
1
解决办法
5890
查看次数

Java 错误:请安装 JCE Unlimited Strength Jurisdiction Policy 文件

我正在开发这个 Java 应用程序,它需要访问“JCE Unlimited Strength”文件,并且我确实安装了它们,并且在我构建解决方案(在 Intellij 中)时它可以正常工作但是当我jar输出时,由于某种原因它给出我这个烦人的错误:

C:\Users\h\whatever\out\artifacts\Accepter_jar>java -cp Accepter.jar Main
org.apache.poi.EncryptedDocumentException: Export Restrictions in place - please install JCE Unlimited Strength Jurisdic
tion Policy files
        at org.apache.poi.poifs.crypt.CryptoFunctions.getCipher(CryptoFunctions.java:208)
        at org.apache.poi.poifs.crypt.CryptoFunctions.getCipher(CryptoFunctions.java:182)
        at org.apache.poi.poifs.crypt.agile.AgileDecryptor.hashInput(AgileDecryptor.java:269)
        at org.apache.poi.poifs.crypt.agile.AgileDecryptor.verifyPassword(AgileDecryptor.java:116)
        at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:95)
        at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:282)
        at ExcelJob.loadExcelSheet(ExcelJob.java:22)
        at Main.main(Main.java:17)
Run Code Online (Sandbox Code Playgroud)

知道有什么问题吗?

java jar jce

2
推荐指数
1
解决办法
8144
查看次数

使用CipherInputStream和CipherOutputStream加密和解密文件

我一直在尝试用AES编写加密文件,然后使用JCA中提供的密码流解密它.但是,我在阅读文件时遇到了问题,因为解密会变得混乱.

public class CipherStreams {
public static void main(String[] args) {
    try {
        KeyGenerator keygen = KeyGenerator.getInstance("AES");
        Key k = keygen.generateKey();

        Cipher aes = Cipher.getInstance("AES/ECB/PKCS5Padding");
        aes.init(Cipher.ENCRYPT_MODE, k);
        FileOutputStream fs = new FileOutputStream("Encrypyed.txt");
        CipherOutputStream out = new CipherOutputStream(fs, aes);
        out.write("[Hello:Okay]\nOkay".getBytes());
        out.close();

        Cipher aes2 = Cipher.getInstance("AES/ECB/PKCS5Padding");
        aes2.init(Cipher.DECRYPT_MODE, k);

        FileInputStream fis = new FileInputStream("Encrypyed.txt");
        CipherInputStream in = new CipherInputStream(fis,aes2);
        byte[] b = new byte[8];
        int i = in.read(b);
        while(i!=-1) {
            System.out.print((char)i);
            i = in.read(b);
        }
    } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | …
Run Code Online (Sandbox Code Playgroud)

java encryption jce

2
推荐指数
1
解决办法
7445
查看次数

如何将 OID 转换为 JCE 算法名称?

我正在寻找一个可以使用 oid 的库,例如1.2.840.10040.4.3并将其转换为其标准名称(在这种情况下SHA1withDSA

使用org.cesecore.certificates.util.AlgorithmTools,我能够实现一些所需的功能,但它非常有限。

这是当前的代码:

String signatureAlgorithmName = AlgorithmTools.getAlgorithmNameFromOID(oid);
Run Code Online (Sandbox Code Playgroud)

笔记:

标准名称可以在这里找到

java cryptography oid jce

2
推荐指数
1
解决办法
1166
查看次数

使用 javax.crypto.Cipher 与 java.security.Signature 进行签名

我正在编写一些旧代码,需要更新它才能使用另一个加密提供商。我不是 Java 专家。我试图了解使用javax.crypto.Cipher和签署哈希值之间有什么区别java.security.Signature

现有代码类似于:

  Cipher cipher = Cipher.getInstance(CFG_ALGO);
  cipher.init(Cipher.DECRYPT_MODE, privateKey);
  byte[] signature = cipher.doFinal(payload);
Run Code Online (Sandbox Code Playgroud)

我收到的使用新提供程序的示例片段如下所示:

  final Signature sign = Signature.getInstance("RSA", SIGNATURE_PROVIDER);
  sign.initSign(keystore.getPrivateKey(keyName, keyPass));
  sign.update(data);
  byte[] signature = sign.sign();
Run Code Online (Sandbox Code Playgroud)

如果我为两者使用相同的提供商,两者之间有什么区别吗?一种方式通常优于另一种方式吗?

java cryptography jce digital-signature jca

2
推荐指数
1
解决办法
1725
查看次数

OpenJDK 11 错误“无法初始化加密机制”

我有一个用 openJDK (Amazon Correto 11) 和 openJFX 编写的应用程序。

当我在本地运行应用程序时 - 一切正常。但是当我从网络共享执行应用程序时出现异常:

java.lang.ExceptionInInitializerError
    at java.base/javax.crypto.JceSecurityManager.<clinit>(JceSecurityManager.java:65)
    at java.base/javax.crypto.Cipher.getConfiguredPermission(Cipher.java:2624)
    at java.base/javax.crypto.Cipher.getMaxAllowedKeyLength(Cipher.java:2646)
    at java.base/sun.security.ssl.SSLCipher.isUnlimited(SSLCipher.java:540)
    at java.base/sun.security.ssl.SSLCipher.<init>(SSLCipher.java:472)
    at java.base/sun.security.ssl.SSLCipher.<clinit>(SSLCipher.java:174)
    at java.base/sun.security.ssl.CipherSuite.<clinit>(CipherSuite.java:67)
    at java.base/sun.security.ssl.SSLContextImpl.getApplicableSupportedCipherSuites(SSLContextImpl.java:348)
    at java.base/sun.security.ssl.SSLContextImpl$AbstractTLSContext.<clinit>(SSLContextImpl.java:579)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:315)
    at java.base/java.security.Provider$Service.getImplClass(Provider.java:1848)
    at java.base/java.security.Provider$Service.newInstance(Provider.java:1824)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
    at java.base/javax.net.ssl.SSLContext.getInstance(SSLContext.java:168)
    at org.apache.http.ssl.SSLContexts.createDefault(SSLContexts.java:51)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.getSocketFactory(SSLConnectionSocketFactory.java:194)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.getDefaultRegistry(PoolingHttpClientConnectionManager.java:115)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:122)
    at com.mashape.unirest.http.options.Options.refresh(Options.java:72)
    at com.mashape.unirest.http.options.Options.<clinit>(Options.java:46)
    at com.mashape.unirest.http.HttpClientHelper.prepareRequest(HttpClientHelper.java:151)
    at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:131)
    at com.mashape.unirest.request.BaseRequest.asString(BaseRequest.java:56)
    at myapp.util.MyTaxNumberValidator$3.run(MyTaxNumberValidator.java:185)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.SecurityException: Can not initialize cryptographic mechanism
    at java.base/javax.crypto.JceSecurity.<clinit>(JceSecurity.java:120)
    ... 27 more …
Run Code Online (Sandbox Code Playgroud)

java jce amazon-web-services openjdk-11

2
推荐指数
1
解决办法
5604
查看次数

如何在 OpenJDK 11 中配置 Java 加密扩展 (JCE)

在 Java 8 之前,需要在 JDK 中下载并安装 JCE 才能使用它。我没有找到 Java 11 的可下载扩展。有没有办法检查它是否是默认配置的?还是我应该通过配置手动激活它?

java jce

2
推荐指数
1
解决办法
4930
查看次数

JCE是Java SE 6的一部分吗?

我正在尝试使用一些开源java库,并且该库将JCE作为其依赖项之一.如果我使用的是Java 1.6,我是需要单独下载JCE库还是它的一部分?看起来像bountycastle.org(JCE的开源提供商)没有列出1.4+的JCE

java jce

1
推荐指数
1
解决办法
1983
查看次数

使用椭圆曲线加密验证签名

我需要验证包含多个值的消息的签名.我唯一的参数是签名,公钥和值本身.用于创建签名的算法是具有192位的椭圆曲线密码术.我已经尝试在网上找到代码示例,但我没有找到任何针对此案例的内容.

有没有人使用java验证这个算法?您能否提供代码或示例链接?

谢谢您的帮助!

java security jce digital-signature elliptic-curve

1
推荐指数
1
解决办法
3439
查看次数

java.security.NoSuchAlgorithmException:在 jar 文件中找不到任何支持 RSA/NONE/PKCS1Padding 的提供程序

我做解密和加密RSA,我用Cipher.getInstance("RSA/NONE/PKCS1Padding");它,我补充说Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());compile 'org.bouncycastle:bcprov-jdk16:1.45'到 gradle-file。所以这个项目在 Intellij Idea 中运行和工作,

但是如果我生成 .jar 文件并运行它,我有:

java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/PKCS1Padding
    at javax.crypto.Cipher.getInstance(Cipher.java:540) 
Run Code Online (Sandbox Code Playgroud)

(由 gradle 的 ShadowJar 任务生成的 .jar)。

为什么我在 Intellij Idea 中的项目 - 工作!在 .jar 文件中 - 不起作用?

java jar jce intellij-idea gradle

1
推荐指数
1
解决办法
7456
查看次数

nCipher HSM重定目标JCE密钥

是否可以通过ncipher JCE API"重新定位"密钥到pkcs11?我知道您可以通过generatekey命令重新定位,但我不知道如何对现有的JCE密钥执行此操作.第一个提示是"源应用程序",选项似乎不包括JCE.它是否支持除此处列出的选项之外的其他选项,还是应该以不同的方式重新定位?

这里的最终目标是导出通过nCipher的JCE API生成的一对密钥(非对称和对称)(是的,我知道HSM的工作是保护密钥和导出通常不是一个好主意,但这是一个要求).我们能够导出通过PKCS11接口生成的密钥,但不能导出通过JCE生成的密钥,因此我们的想法是,如果我们可以将它从JCE重新定位到PKCS11,我们也可以导出这些密钥.如果还有其他方法可以做到这一点,我们也会对此持开放态度.

最后,在对它们执行nfkminfo时,JCE键显示为"已启用恢复".这是否意味着它们可以出口或者这里的恢复意味着什么呢?

jce pkcs#11 hsm

1
推荐指数
1
解决办法
1141
查看次数

为什么RC4无法处理大量加密数据?

我有以下代码解密文件.

package encryption;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class Decrypter {

    private static final String PASSWORD = "t_9Y#i@eT[h3}-7!";
    private static final String KEY_ALGORITHM = "PBEWithMD5AndDES";
    private static final String CIPHER_ALGORITHM = "RC4"; //Using Salsa20 or HC256 solves the problem
    private static final String PROVIDER = "BC";

    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());

        File inputFile = new …
Run Code Online (Sandbox Code Playgroud)

java security encryption bouncycastle jce

0
推荐指数
1
解决办法
1951
查看次数