虽然PGPPublicKey
类提供了IsEncryptionKey()
方法来确定公钥的算法是否可用于加密目的(RSA_General
,RSA_Encrypt
,ELGAMAL_General
,ELGAMAL_Encrypt
),但仅此一项不足以选择有效的加密子密钥。
如GnuPG packet.h中所示,存在关于数据包中存储的公钥的预期用法的信息:
41 /* Usage flags */
42 #define PUBKEY_USAGE_SIG GCRY_PK_USAGE_SIGN /* Good for signatures. */
43 #define PUBKEY_USAGE_ENC GCRY_PK_USAGE_ENCR /* Good for encryption. */
44 #define PUBKEY_USAGE_CERT GCRY_PK_USAGE_CERT /* Also good to certify keys.*/
45 #define PUBKEY_USAGE_AUTH GCRY_PK_USAGE_AUTH /* Good for authentication. */
46 #define PUBKEY_USAGE_UNKNOWN GCRY_PK_USAGE_UNKN /* Unknown usage flag. */
47 #define PUBKEY_USAGE_NONE 256 /* No usage given. */
我的问题是,鉴于Bouncy Castle不公开这些标志,在Java中从一个PublicKeyPacket中提取这个密钥使用信息的建议方法是什么?
我想出来了。对于子孙后代来说,解决办法是:
// If Key Usage flags are present, we must respect them:
int keyFlagsEncountered = 0;
boolean keyUsageAllowsEncryption = false;
Iterator<PGPSignature> i = key.getSignatures();
while(i.hasNext()) {
PGPSignature signature = i.next();
int keyFlags = signature.getHashedSubPackets().getKeyFlags();
keyFlagsEncountered += keyFlags;
boolean isEncryptComms = (keyFlags & KeyFlags.ENCRYPT_COMMS) > 0;
boolean isEncryptStorage = (keyFlags & KeyFlags.ENCRYPT_STORAGE) > 0;
// Other KeyFlags available here (AUTHENTICATION, SIGN_DATA, CERTIFY_OTHER).
if (isEncryptComms || isEncryptStorage) {
keyUsageAllowsEncryption = true;
}
}
// However, if Key Usage flags are not present (older key, or key generation process simply did not include the flags)
// then we still attempt to use an encryption key using the existing methods:
keyUsageAllowsEncryption = keyFlagsEncountered == 0 || keyUsageAllowsEncryption;
我对使用bouncy-gpg和PCKS12密钥的加密和描述的实现有麻烦。现在我有了PCKS12密钥(扩展名:.p12)。从这个密钥,我能够获得公钥和私钥。否则,bouncy-gpg需要使用gpg密钥。如何在bouncy-gpg中使用p12文件?如果有任何建议,我将不胜感激。多谢了。
我有一个全新的Linux Mint14安装。已安装Thunderbird&Enigmail。 我试着删除我的密钥并重新移植它。我试着改变各种设置。但我想不出问题出在哪里。我以前使用过Linux/Thunderbird/Enigmail,从来没有出现过这个错误。
我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥:
问题内容: Doc缺少示例…您如何基于密钥使用? 尝试根据键插入。 将插入位置放在。 从文档… A,X,LO = 0,HI = LEN(a)中 插入 X 在 一个 按排序顺序。这等效于假设 a 已经排序。请记住,O(log n)搜索由缓慢的O(n)插入步骤主导。 用法示例: 我希望把后排序列表中使用。眼下看跌期权的......因为我不使用的钥匙,做插入…文档不显示做用钥匙插入。 问题答案: 这确实
问题内容: 我正在尝试从JSON对象提取密钥。在这种情况下,JSON对象是通过对名为 SkyRock的 社交网站的API调用获得的,如下所示: 我基本上想将所有 post_id 值存储在ArrayList中。为了做到这一点,我试图从JSON对象中提取 密钥 ,并按如下方式进行: 问题是无法找到合适的变量类型,在其中我可以存储从 keyset() 方法获得的结果。 我尝试搜索答案,但是在大多数情况下
以前有人这么做过吗?谢谢