标签: jce

Java SE强大的Java 7加密技术?

Java 7的预览版似乎缺少JCE包,以实现无限的加密强度.有人偶然发现了这样的事吗?

java cryptography jce java-7

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

RSA解密错误 - IllegalBlockSizeException:数据不得超过128个字节

我现在正在制作RSA消息认证软件.过程如下:

  1. 使用A的私钥(1024位)对邮件进行签名
  2. 使用A的公钥验证邮件(1024位)

#1代码(如下)工作正常并生成以下结果:

5554c9a9f6838b6cf40d9dbfbab3d90ea27aa6434ed095d289c13c2624617993ad99161ac265276d150510c176341d8ab8600d08b7353286d465e6bd3370a6fd8dd3ffb82916f612fd6dcee5e654ed801cfca6b6d2d5d6dc99ff7921b615abdf62eb67db1f71e6a6ea70012fd35e7cefa1a8d3aab7614c47746cfe1fc2bc875b

但是#2代码显示以下错误:

javax.crypto.IllegalBlockSizeException: Data must not be longer than 128 bytes

我认为#1中的行Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 产生2048位(256字节)的结果.也许这就是问题......记住我使用1024位私钥.

那么#1代码如何生成128字节的结果呢?

1. SignMail.java

public class SignMail {

    static {
        Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider());
    }

    public static String sign(String userOriginalMessage) throws Exception {

        PEMReader userPrivateKey = new PEMReader(
          new InputStreamReader(
             new FileInputStream(Environment.getExternalStorageDirectory()+"/pkcs10priv.key")));

        KeyPair keyPair = (KeyPair)userPrivateKey.readObject();

        byte[] cipherText;
        //modified by JEON 20130817
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        //encrypt the message using private key
        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());
        cipherText = cipher.doFinal(userOriginalMessage.getBytes());
        return new String(Hex.encode(cipherText));

    }


} …
Run Code Online (Sandbox Code Playgroud)

java rsa key jce

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

AdoptOpenJDK 11 中的 JCE

Java Cryptography Extension (JCE) 可以在这里找到,但该页面说

当前版本的 JDK 不需要这些策略文件。此处提供它们是为了与旧版本的 JDK 一起使用。

JDK 9 及更高版本附带并默认使用无限制的策略文件。

这也适用于AdoptOpenJDK 11 吗?或者这仅限于 Oracle 的 JDK?我怎么知道它们可用?

jce adoptopenjdk

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

是否有实用的方法来确定使用哪些JCE加密提供程序?

我们已将Java产品配置为仅使用FIPS验证的RSA JCE加密提供程序.但是,当java.security中列出RSA库时,该产品将不起作用.因此,有些事情要求来自其他提供商的非FIPS算法.

通过消除过程,我们可以判断哪些罐子是成功运行所必需的,但这并不能告诉我们哪些算法正在被请求,或者由谁来执行.

这似乎是一个经常被问到的问题,但显然我们没有发现正确的文档或Google搜索字符串:是否有任何可靠,方便和一致的机制来确定在正在运行的JVM实例中使用哪些JCE提供程序?

java provider cryptography rsa jce

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

JCA,它的提供者和JCE之间的关系?

我认为JCA替代JCE很简单.但是,编写一些测试代码以获取我系统上的所有提供程序后显示情况并非如此.

我注意到以下几点:

  1. 一些算法有多个供应商(如:MD5withRSASunRsaSignSunJSSE)
  2. JCA似乎有type超出JCE中的算法

第1项是有道理的,因为JCA(对我来说)作为JCE提供者的库/数组来挑选.

第2项有点令人困惑,因为它表明JCA不是一组"相同的"JCE提供者; 对于任何和所有"类型"的提供者来说,它都是某种水坑,JCE接口与否.

那么,JCA,它的供应商和JCE之间的工作关系是什么?提供者是否也存在于独立的孤岛中,或者它们是否相互"构建"/它们之间是否存在依赖关系?

对于那些对代码感兴趣的人和提出这个问题的结果,下面列出了它


import java.security.Provider;
import java.security.Security;
import java.util.ArrayList;

public class ConsoleListJca 
{
    public static void main(String[] args) 
    {
        for (Provider provider : Security.getProviders()) 
        {
            System.out.println("Provider: " + provider.getName() + " (ver " + provider.getVersion() + ")");
            System.out.print("  Algorithms: ");
            ArrayList<String> algos = new ArrayList<String>();
            for (Provider.Service service : provider.getServices()) 
            {
                algos.add(String.format( "%s (%s)", service.getAlgorithm(), service.getType()));
            }
            java.util.Collections.sort(algos);
            String algorsStr = algos.toString();
            // remove [ …
Run Code Online (Sandbox Code Playgroud)

java cryptography jce jca

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

PKIXCertPathBuilder 使用 Bouncy Castle 提供程序失败,但可以使用默认 (SUN) 提供程序

我正在使用以下代码根据此处X509Certificate的参考资料验证 a 。

static void verifyCertTrust(X509Certificate certificate, Set<X509Certificate> additionalCerts) throws CertificateException, NoSuchAlgorithmException, NoSuchProviderException, CertPathValidatorException, InvalidAlgorithmParameterException, CertPathBuilderException{

        Set<X509Certificate> trustedRoots = new HashSet<X509Certificate>();
        Set<X509Certificate> intermediateCerts = new HashSet<X509Certificate>();

        for (X509Certificate cert : additionalCerts) {
            if(isSelfSigned(cert)){
                trustedRoots.add(cert);
            }
            else{
                intermediateCerts.add(cert);
            }
        }

        Set<TrustAnchor> trustAnchors = new HashSet<TrustAnchor>();
        for (X509Certificate root : trustedRoots) {
            trustAnchors.add(new TrustAnchor(root, null));
        }

        X509CertSelector selector = new X509CertSelector();
        selector.setCertificate(certificate);


        PKIXParameters parameters = new PKIXBuilderParameters(trustAnchors, selector);
        parameters.setRevocationEnabled(false);
        CertStore intermediateCertStore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(intermediateCerts), "BC");
        parameters.addCertStore(intermediateCertStore);

        CertPathBuilder cpb …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle jce x509certificate

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

带有 PKCS#5 填充的 AES

在很多地方,我看到 Java 代码使用 AES 和 PKCS#5 填充。我不明白这怎么可能行得通。

PKCS#5 填充旨在与块大小 <= 8 字节的密码一起使用。AES 的块大小为 16 字节。所有使用 AES 和 PKCS#5 的代码都是错误的吗?或者框架内部是否使用 PKCS#7 来代替?所讨论的框架是 Sun 提供的 Java、JCE 和 BouncyCastle。

java encryption bouncycastle jce aes

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

Bouncy Castle vs Java默认RSA与OAEP

有人可以向我解释为什么这个代码javax.crypto.BadPaddingException: Decryption error在解密密钥时会抛出最后一行吗?

// Given an RSA key pair...
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.genKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();

// ... and an AES key:
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(256);
SecretKey aesKey = keyGenerator.generateKey();

// When I encrypt the key with this Bouncy Castle cipher:
Cipher encryptionCipher = Cipher.getInstance("RSA/NONE/OAEPWithSHA256AndMGF1Padding", "BC");
encryptionCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedKey = encryptionCipher.doFinal(aesKey.getEncoded());

// Then trying to decrypt the key with this cipher...
Cipher decryptionCipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING");
decryptionCipher.init(Cipher.DECRYPT_MODE, …
Run Code Online (Sandbox Code Playgroud)

java encryption rsa bouncycastle jce

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

在Eclipse安装期间验证JCE证书

在Eclipse的安装过程中(使用Eclipse Installer),我被问到“您信任这些证书吗?”,其中列出了Bouncy Castle的两个证书(一个由Sun签名,一个由Oracle签名)和一个Eclipse的证书(由Sun签名)。如何验证这些证书?

证书对话框的屏幕截图

我了解这是JCE(Java密码学扩展)的代码签名证书,即Oracle签署的用于加密,密钥生成和密钥协议以及消息身份验证代码(MAC)算法的证书。我也知道Bouncy Castle通常用于提供与加密有关的算法。

两个问题:

  1. 所有证书都由相同的两个CA签名,但是我找不到“官方” CA证书指纹的(公共)列表。我如何验证这些?
    • Sun Microsystems Inc颁发给JCE的JCE代码签名CA,有效期至2020-04-25,指纹57:37:D1:E1:16:2F:F6:FE:26:B9:87:88:D2:86: DA:66:7F:98:54:3C
    • Oracle Corporation颁发给Oracle Corporation的JCE代码签名CA,有效期至2030-12-31,指纹F4:B9:C6:4A:52:AD:22:3C:E4:BF:BA:52:52:87:9C :9F:71:1D:4B:33
  2. 为什么默认情况下不信任那些CA,即这些CA包含在JDK / JRE随附的某些信任存储中?CA由Oracle操作(至少CA证书这样说),我使用的JRE由Oracle提供(openjdk 11.0.2),我认为没有理由不信任CA(因为它们确实合法) 。

eclipse certificate jce

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

Jasypt CLI 错误 无法操作(错误的输入或参数)

我遇到了与命令行 Jasypt 客户端加密“无法操作”相同的问题,但是该帖子适用于更旧版本的 Java。

我已经检查了为 java 列出的路径(在下面的 java_home 中)并查看 lib\security\policy\unlimited 文件夹和必要的 .jar 文件,但我仍然收到以下错误。

虽然它可能相关,也可能不相关,但我无法让 arg ivGeneratorClassName=RandomIvGenerator 工作,这几乎同样让我发疯。它抛出一个 ClassNotFound 异常,但是当我在 Eclipse 中展开它时,George 类 org.jasypt.iv.RandomIvGenerator 在那里。

Jasypt 输出:

C:\jsypt\bin>encrypt.bat input=SomeVeryLongPassword password=MixItUpALot algorit
hm=PBEWITHHMACSHA256ANDAES_256

----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) Client VM 25.171-b11



----ARGUMENTS-------------------

algorithm: PBEWITHHMACSHA256ANDAES_256
input: SomeVeryLongPassword
password: MixItUpALot



----ERROR-----------------------

Operation not possible (Bad input or parameters)
Run Code Online (Sandbox Code Playgroud)

算法列表(格式化为更易读):

    C:\jsypt\bin>listAlgorithms.bat

    DIGEST ALGORITHMS:   [MD2, MD5, SHA, SHA-224, SHA-256, SHA-384, SHA-512]

    PBE ALGORITHMS:      [PBEWITHHMACSHA1ANDAES_128, PBEWITHHMACSHA1ANDAES_256, PBEWITHHMACSHA224ANDAES_128, 
    PBEWITHHMACSHA224ANDAES_256, PBEWITHHMACSHA256ANDAES_128, PBEWITHHMACSHA256ANDAES_256, PBEWITHHMACSHA384ANDAES_128, 
PBEWITHHMACSHA384ANDAES_256, PBEWITHHMACSHA512ANDAES_128, PBEWITHHMACSHA512ANDAES_256, …
Run Code Online (Sandbox Code Playgroud)

java jce jasypt

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