我试图学习并在java中实现JWE来解决问题。我试图理解内容加密密钥是如何使用特定算法生成的(比如RSA-PKCS1\u 1.5)。
我知道如何使用密钥生成器生成一对密钥,然后使用公钥进行加密,使用私钥进行解密。此外,我知道如何通过给出声明来创建简单的JWT令牌,以及如何对其进行签名。我试着遵循以下步骤:
消息加密过程如下:
生成随机内容加密密钥(CEK)。CEK的长度必须至少等于所需加密密钥的长度,并且必须随机生成。
为收件人加密CEK
生成随机IV(如果算法需要)。
如果包含zip参数,则压缩纯文本。
将(压缩的)明文序列化为位字符串M。
使用CEK和IV加密M以形成位字符串C。
将编码的JWE密文设置为C的base64url编码表示形式。
创建一个包含所使用的加密参数的JWE标头。
Base64url对JWE头的UTF-8表示的字节进行编码,以创建编码的JWE头。
这三个编码部分合在一起是加密的结果。
public static void main(String[] args)
throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
//ASYMMETRIC ENCRYPTION
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keys = keyPairGenerator.generateKeyPair();
byte[] publicKey = keys.getPublic().getEncoded();
byte[] privateKey = keys.getPrivate().getEncoded();
System.out.println("PUBLIC KEY ::: " + Base64.encodeBase64String(publicKey));
System.out.println("PRIVATE KEY ::: " + Base64.encodeBase64String(privateKey));
Cipher cipher = Cipher.getInstance("RSA");
//PUBLIC KEY IS GETTING USED IN ENCRYPTING PLAIN TEXT
cipher.init(Cipher.ENCRYPT_MODE, keys.getPublic());
byte[] encryptedBytes = cipher.doFinal("Test String".getBytes());
//PRIVATE KEY IS GETTING USED IN DECRYPTING CIPHER TEXT
cipher.init(Cipher.DECRYPT_MODE, keys.getPrivate());
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
System.out.println("encrypted data ::: " + BaseEncoding.base64().encode(encryptedBytes));
System.out.println("decrypted text ::: " + new String(decryptedBytes));
}
密钥管理模式用于确定CEK。每个算法都使用其中一种模式。以下是可用模式和算法关联列表:
RSA1_5
,RSA-OAEP
,RSA-OAEP-256
,RSA-OAEP-384
,RSA-OAEP-512
A128KW
,A192KW
,A256KW
,PBES2-HS256 A128KW
,PBES2-HS384 A192KW
,PBES2-HS512 A256KW
,A128GCMKW
,A192GCMKW
,A256GCMKW
ECDH-ES
ECDH-ES A128KW
,ECDH-ES A192KW
,ECDH-ES A256KW
dir
我正在使用节点jose v0。11.0 (https://www.npmjs.com/package/node-jose)用于JWK和JWE操作。我有一个JWK格式的RSA密钥,可以加载到JWK密钥存储中,也可以再次提取。然而,当我尝试加密任何东西时,我会进入“error2”,“unsupported algorithm”。RSA怎么可能是不受支持的算法? 结果如下: 更新我在实际代码中挖掘了一点
我试图在Android(Java)中实现ECDH加密/解密和JWE。 我找到了jose4j和Nimbus JOSE库,它们旨在做我需要的一切,但似乎比我想象的更具挑战性。 如果有人熟悉的话,那就是3D安全2.0。。。 在以下规范中: SDK=本地端 DS=目录服务器(另一边) 接下来是规范: 给定:P(DS)-EC公钥(以PEM格式提供,可以转换为PublicKey或JWK) 生成新的短暂密钥对(
我从这里得到了提示:PHP中的双向加密 作为测试环境,im运行WAMP LocalHost。
问题内容: 我正在用Python编写程序,以通过安装程序分发给Windows用户。 该程序需要能够每天下载使用用户公钥加密的文件,然后再解密。 因此,我需要找到一个Python库,该库将允许我生成公共和私有PGP密钥,并解密使用该公共密钥加密的文件。 pyCrypto是否会做这件事(文档模糊)?还有其他纯Python库吗?使用任何语言的独立命令行工具如何? 到目前为止,我所看到的只是GNUPG,但
我有一个类似于下面的私钥 例如。 我有下面的JWE数据,它是使用上面的私钥/证书生成的公钥加密的 有人能给我java代码,我可以用我的私钥解密这个JWE吗?我在网上找不到明确的答案。我对JWE这个概念很陌生
问题内容: 我有一个奇怪的问题 我的解决方案基于将硬编码文件解密为字节[] 因此,我写了一个小的Cypher类来帮助进行加密/解密…它曾经用来模拟在某个地方进行硬编码的密钥,以及另一个在其他地方存储的预加密密钥。但这与atm无关。 加密过程如下: 检索硬编码的字节数组 用它来解密key2 使用key2解密数据 使用key1进一步解密数据 已解密数据 我将加密的数据存储为十六进制字符串,使用这两个函