JavaでOIDを使用してハッシュアルゴリズム名を取得する方法

デビッド・レイス:

Javaでバイト配列のハッシュを計算しようとしています。MessageDigestインスタンスを取得するには、ハッシュ名を通知する必要がありますが、私はハッシュOIDしか持っていません。これを行う別の方法またはハッシュOIDからハッシュ名への既存のマップはありますか?

String oid = "1.2.3.4.5";
String digestAlgorithmName = getDigestAlgorithmName(oid);

MessageDigest messageDigest = MessageDigest.getInstance(digestAlgorithmName);
byte[] actualHash = messageDigest.digest(new byte[] { 0x00 });
デビッド・レイス:

答えを見つけました。Bouncy Castle Libraryのクラスorg.bouncycastle.cms.CMSSignedHelper がマッピングを持っています。必要なスニペットをそこから抽出し、ここにコピーしました。

...
private static final Map     encryptionAlgs = new HashMap();
private static final Map     digestAlgs = new HashMap();

static
{
    encryptionAlgs.put(X9ObjectIdentifiers.id_dsa_with_sha1.getId(), "DSA");
    encryptionAlgs.put(X9ObjectIdentifiers.id_dsa.getId(), "DSA");
    encryptionAlgs.put(OIWObjectIdentifiers.dsaWithSHA1.getId(), "DSA");
    encryptionAlgs.put(PKCSObjectIdentifiers.rsaEncryption.getId(), "RSA");
    encryptionAlgs.put(PKCSObjectIdentifiers.sha1WithRSAEncryption.getId(), "RSA");
    encryptionAlgs.put(TeleTrusTObjectIdentifiers.teleTrusTRSAsignatureAlgorithm, "RSA");
    encryptionAlgs.put(X509ObjectIdentifiers.id_ea_rsa.getId(), "RSA");
    encryptionAlgs.put(CMSSignedDataGenerator.ENCRYPTION_ECDSA, "ECDSA");
    encryptionAlgs.put(X9ObjectIdentifiers.ecdsa_with_SHA2.getId(), "ECDSA");
    encryptionAlgs.put(X9ObjectIdentifiers.ecdsa_with_SHA224.getId(), "ECDSA");
    encryptionAlgs.put(X9ObjectIdentifiers.ecdsa_with_SHA256.getId(), "ECDSA");
    encryptionAlgs.put(X9ObjectIdentifiers.ecdsa_with_SHA384.getId(), "ECDSA");
    encryptionAlgs.put(X9ObjectIdentifiers.ecdsa_with_SHA512.getId(), "ECDSA");
    encryptionAlgs.put(CMSSignedDataGenerator.ENCRYPTION_RSA_PSS, "RSAandMGF1");
    encryptionAlgs.put(CryptoProObjectIdentifiers.gostR3410_94.getId(), "GOST3410");
    encryptionAlgs.put(CryptoProObjectIdentifiers.gostR3410_2001.getId(), "ECGOST3410");
    encryptionAlgs.put("1.3.6.1.4.1.5849.1.6.2", "ECGOST3410");
    encryptionAlgs.put("1.3.6.1.4.1.5849.1.1.5", "GOST3410");

    digestAlgs.put(PKCSObjectIdentifiers.md5.getId(), "MD5");
    digestAlgs.put(OIWObjectIdentifiers.idSHA1.getId(), "SHA1");
    digestAlgs.put(NISTObjectIdentifiers.id_sha224.getId(), "SHA224");
    digestAlgs.put(NISTObjectIdentifiers.id_sha256.getId(), "SHA256");
    digestAlgs.put(NISTObjectIdentifiers.id_sha384.getId(), "SHA384");
    digestAlgs.put(NISTObjectIdentifiers.id_sha512.getId(), "SHA512");
    digestAlgs.put(PKCSObjectIdentifiers.sha1WithRSAEncryption.getId(), "SHA1");
    digestAlgs.put(PKCSObjectIdentifiers.sha224WithRSAEncryption.getId(), "SHA224");
    digestAlgs.put(PKCSObjectIdentifiers.sha256WithRSAEncryption.getId(), "SHA256");
    digestAlgs.put(PKCSObjectIdentifiers.sha384WithRSAEncryption.getId(), "SHA384");
    digestAlgs.put(PKCSObjectIdentifiers.sha512WithRSAEncryption.getId(), "SHA512");
    digestAlgs.put(TeleTrusTObjectIdentifiers.ripemd128.getId(), "RIPEMD128");
    digestAlgs.put(TeleTrusTObjectIdentifiers.ripemd160.getId(), "RIPEMD160");
    digestAlgs.put(TeleTrusTObjectIdentifiers.ripemd256.getId(), "RIPEMD256");
    digestAlgs.put(CryptoProObjectIdentifiers.gostR3411.getId(),  "GOST3411");
    digestAlgs.put("1.3.6.1.4.1.5849.1.2.1",  "GOST3411");
}

String getDigestAlgName(String digestAlgOID) {
    String algName = (String)digestAlgs.get(digestAlgOID);

    if (algName != null)
    {
        return algName;
    }

    return digestAlgOID;
}

String getEncryptionAlgName(String encryptionAlgOID) {
    String algName = (String)encryptionAlgs.get(encryptionAlgOID);

    if (algName != null)
    {
        return algName;
    }

    return encryptionAlgOID;
}

MessageDigest getDigestInstance(String algorithm, String provider) 
    throws NoSuchProviderException, NoSuchAlgorithmException {
    if (provider != null)
    {
        try
        {
            return MessageDigest.getInstance(algorithm, provider);
        }
        catch (NoSuchAlgorithmException e)
        {
            return MessageDigest.getInstance(algorithm); // try rolling back
        }
    }
    else
    {
        return MessageDigest.getInstance(algorithm);
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

phpのopenssl_x509_parseを使用してSSL証明書ハッシュアルゴリズムOIDを取得する方法

分類Dev

codenameoneでSHA1Digestアルゴリズムを使用してカスタムキーでデータをハッシュする方法

分類Dev

Ionic2でSHA-1アルゴリズムを使用してハッシュパスワードを生成する方法

分類Dev

テンプレートを使用してmd5ハッシュアルゴリズムを構築する

分類Dev

C#暗号化を使用して署名ハッシュアルゴリズムのわかりやすい名前を取得するにはどうすればよいですか?

分類Dev

sha512アルゴリズムでJavaScriptを使用して文字列をハッシュするにはどうすればよいですか

分類Dev

typescript crypto-jssha256アルゴリズムとキーを使用してデータをハッシュする方法

分類Dev

SHA256ハッシュアルゴリズムは、CommonCryptoとOpenSSLを使用してiOSで異なる結果を生成します

分類Dev

PHPで同時に複数のアルゴリズムでファイルをハッシュする方法は?

分類Dev

OIDをJCEアルゴリズム名に変換する方法は?

分類Dev

nginxでアップストリームハッシュとしてURLパス名を使用する方法

分類Dev

オブジェクトをハッシュとして使用するJavaScriptアルゴリズムの複雑さを理解する

分類Dev

複合キーを使用したCassandraハッシュアルゴリズム

分類Dev

ハッシュテーブルを使用した単語検索に使用するアルゴリズムは何ですか?

分類Dev

Edmonds–Karpアルゴリズムを使用してカットセットを取得する方法は?

分類Dev

文字列を動的な文字数にハッシュするアルゴリズム

分類Dev

HMACSHA1アルゴリズムを使用してハッシュされたパスワードの最大長はどれくらいですか

分類Dev

Pythonの辞書マッピングはどのハッシュアルゴリズムを使用しますか?

分類Dev

Pythonの辞書マッピングはどのハッシュアルゴリズムを使用しますか?

分類Dev

golangでハッシュアルゴリズムを動的に切り替える方法は?

分類Dev

springsecurityを使用してGrailsアプリでパスワードをハッシュするために使用されるアルゴリズムをどのように決定できますか?

分類Dev

キャッシュがエビクトポリシーとして最近使用された(MRU)アルゴリズムを使用するのはなぜですか?

分類Dev

文字列内のすべての文字が一意であるかどうかを検出するためにチェックする Java アルゴリズムは、ハッシュマップで機能していませんか? マップ演算子を使用したより良い解決策はありますか?

分類Dev

RSAとOAEP:ハッシュアルゴリズムを選択するかしないか?

分類Dev

Framework7Cordovaを使用してリアルタイムでプッシュ通知を取得する方法

分類Dev

rsa:2048を使用して作成されたSSL証明書は、SHA-2暗号化ハッシュアルゴリズムを使用しますか?

分類Dev

phpseclibで暗号化し、AESアルゴリズムを使用してJavaで復号化する方法

分類Dev

パスワードのハッシュに使用されるハッシュアルゴリズムを見つける方法は?

分類Dev

検索でのハッシュアルゴリズムの使用

Related 関連記事

  1. 1

    phpのopenssl_x509_parseを使用してSSL証明書ハッシュアルゴリズムOIDを取得する方法

  2. 2

    codenameoneでSHA1Digestアルゴリズムを使用してカスタムキーでデータをハッシュする方法

  3. 3

    Ionic2でSHA-1アルゴリズムを使用してハッシュパスワードを生成する方法

  4. 4

    テンプレートを使用してmd5ハッシュアルゴリズムを構築する

  5. 5

    C#暗号化を使用して署名ハッシュアルゴリズムのわかりやすい名前を取得するにはどうすればよいですか?

  6. 6

    sha512アルゴリズムでJavaScriptを使用して文字列をハッシュするにはどうすればよいですか

  7. 7

    typescript crypto-jssha256アルゴリズムとキーを使用してデータをハッシュする方法

  8. 8

    SHA256ハッシュアルゴリズムは、CommonCryptoとOpenSSLを使用してiOSで異なる結果を生成します

  9. 9

    PHPで同時に複数のアルゴリズムでファイルをハッシュする方法は?

  10. 10

    OIDをJCEアルゴリズム名に変換する方法は?

  11. 11

    nginxでアップストリームハッシュとしてURLパス名を使用する方法

  12. 12

    オブジェクトをハッシュとして使用するJavaScriptアルゴリズムの複雑さを理解する

  13. 13

    複合キーを使用したCassandraハッシュアルゴリズム

  14. 14

    ハッシュテーブルを使用した単語検索に使用するアルゴリズムは何ですか?

  15. 15

    Edmonds–Karpアルゴリズムを使用してカットセットを取得する方法は?

  16. 16

    文字列を動的な文字数にハッシュするアルゴリズム

  17. 17

    HMACSHA1アルゴリズムを使用してハッシュされたパスワードの最大長はどれくらいですか

  18. 18

    Pythonの辞書マッピングはどのハッシュアルゴリズムを使用しますか?

  19. 19

    Pythonの辞書マッピングはどのハッシュアルゴリズムを使用しますか?

  20. 20

    golangでハッシュアルゴリズムを動的に切り替える方法は?

  21. 21

    springsecurityを使用してGrailsアプリでパスワードをハッシュするために使用されるアルゴリズムをどのように決定できますか?

  22. 22

    キャッシュがエビクトポリシーとして最近使用された(MRU)アルゴリズムを使用するのはなぜですか?

  23. 23

    文字列内のすべての文字が一意であるかどうかを検出するためにチェックする Java アルゴリズムは、ハッシュマップで機能していませんか? マップ演算子を使用したより良い解決策はありますか?

  24. 24

    RSAとOAEP:ハッシュアルゴリズムを選択するかしないか?

  25. 25

    Framework7Cordovaを使用してリアルタイムでプッシュ通知を取得する方法

  26. 26

    rsa:2048を使用して作成されたSSL証明書は、SHA-2暗号化ハッシュアルゴリズムを使用しますか?

  27. 27

    phpseclibで暗号化し、AESアルゴリズムを使用してJavaで復号化する方法

  28. 28

    パスワードのハッシュに使用されるハッシュアルゴリズムを見つける方法は?

  29. 29

    検索でのハッシュアルゴリズムの使用

ホットタグ

アーカイブ