【问题标题】:Java equivalent of C++ Botan function callJava 等价于 C++ Botan 函数调用
【发布时间】:2019-11-18 15:56:03
【问题描述】:

我有一个类似这样的 C++ 代码:

Botan::AutoSeeded_RNG botan_rng;
Botan::RSA_PrivateKey private_key(botan_rng, 2048);
Botan::PK_Signer botan_pss_signer(private_key, botan_rng, "PSSR_Raw(SHA-256,MGF1,32)");

我想做的是在 Java 中实现相同的功能。到目前为止我尝试过的如下:

    Signature rsa = null;
    try {
        rsa = Signature.getInstance("SHA256withRSAAndMGF1", "BC");
    } catch (NoSuchAlgorithmException | NoSuchProviderException e) {
        e.printStackTrace();
    } 

    try {
        rsa.initSign((PrivateKey)privateKey, new SecureRandom());
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    }

而privateKey生成为

KeyPairGenerator kpg = null;
try {
    kpg = KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();
Key publicKey = kp.getPublic();
Key privateKey = kp.getPrivate();

问题是我的做法是否正确?还是我的 Java 代码中缺少某些内容?特别是关于随机生成器部分,我不确定 Java SecureRandom 是否在做与Botan::AutoSeeded_RNG 类似的事情,而且我在 BC 中使用的算法也不确定它是否与 PSSR_Raw(SHA-256,MGF1,32) 等效?

【问题讨论】:

    标签: java c++ bouncycastle botan


    【解决方案1】:

    我能够使用以下算法与 BC 并设置参数规格如下解决问题:

    Signature signature = Signature.getInstance("RawRSASSA-PSS", "BC");
    PSSParameterSpec pssParameterSpec = new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, KEY_AUTHORIZATION_INIT_SIGN_SALT_SIZE, 
                PSSParameterSpec.DEFAULT.getTrailerField());
    signature.setParameter(pssParameterSpec);
    

    关键是使用 RAW 算法对哈希进行签名。我从这篇帖子中得到了提示RAW signer

    【讨论】:

      猜你喜欢
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2013-10-09
      相关资源
      最近更新 更多