- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
加密是用Stanford Javascript Crypto Library完成的(SJCL)。下面是一个完整的加密示例,分为两部分。第一个是关于使用 PBKDF2 进行基于密码的 key 推导。 .在第二部分中,实际加密是使用派生 key 和 initialization vector 进行的。 (四).请注意,salt 和 IV 是硬编码的,因此更容易提供 C# 解密解决方案。
// Key derivation…
var password = "password";
var salt = sjcl.codec.hex.toBits(
"5f9bcef98873d06a" // Random generated with sjcl.random.randomWords(2, 0);
); // Hex encoded with sjcl.codec.hex.toBits(randomSalt);
var iterations = 1000;
var keySize = 128;
var encryptionKey = sjcl.misc.pbkdf2(password, salt, iterations, keySize);
// Encryption…
var blockCipher = new sjcl.cipher.aes(encryptionKey);
var plainText = sjcl.codec.utf8String.toBits("secret");
var iv = sjcl.codec.hex.toBits("8291ff107e798a29");
var adata = ""; // What is adata?
var tag = 64; // What is tag? I think it is authentication strength.
var cipherText = sjcl.mode.ccm.encrypt(blockCipher, plainText, iv, adata, tag);
encryptionKey
变量的值:
[ -74545279, -553931361, -1590906567, 1562838103 ]
fb8e8781defbad9fa12cb1395d270457
+46Hgd77rZ+hLLE5XScEVw==
iv
变量的值:
[ -2104361200, 2121894441 ]
8291ff107e798a29
gpH/EH55iik=
cipherText
变量的值:
[ 1789401157, -1485204800, -440319203, 17593459146752 ]
6aa81845a77992c0e5c1431d4be2
aqgYRad5ksDlwUMdS+I=
问题是:
如何用 Bouncy Castle 解密密文?
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Parameters;
namespace SjclHelpers {
public static class Encryption {
/// <summary>Decrypts the cipher text.</summary>
/// <param name="cipherText">The cipher text.</pararesm>
/// <param name="key">The encryption key.</param>
/// <param name="initializationVector">The IV.</param>
/// <returns>The decrypted text.</returns>
public static byte[] Decrypt(this byte[] cipherText,
byte[] key, byte[] initializationVector) {
var keyParameter = new KeyParameter(key);
const int macSize = 64;
var nonce = initializationVector;
var associatedText = new byte [] {};
var ccmParameters = new CcmParameters(
keyParameter,
macSize,
nonce,
associatedText);
var ccmMode = new CcmBlockCipher(new AesFastEngine());
var forEncryption = false;
ccmMode.Init(forEncryption, ccmParameters);
var plainBytes =
new byte[ccmMode.GetOutputSize(cipherText.Length)];
var res = ccmMode.ProcessBytes(
cipherText, 0, cipherText.Length, plainBytes, 0);
ccmMode.DoFinal(plainBytes, res);
return plainBytes;
}}}
我得到一个 System.ArgumentException
。我认为它是在提示其中一个字节数组太短。
Boncy CaSTLe 可在 NuGet 站点的以下位置获得:http://nuget.org/packages/BouncyCastle .
AES/CCM 解密解决方案将成为 SjclHelpers 的一部分项目 CodePlex并将作为 NuGet 包发布。
最佳答案
据我所知:
AeadParameters
而不是 CcmParameters
但这可能仍然没问题,当然不要用 ParametersWithIV 包装它associateText
是可选的,因为如果您需要,CCM 可以验证与您的加密数据相关的未加密数据。您可能需要一个参数,因为它需要与 sjcl adata
相同,并且传输方法可以是任何东西。tag
和 macSize
相同是正确的。ccmMode.DoFinal(plainBytes, res);
macSize/8
) 个字节与 ccmMode.GetMac()
进行比较以检查身份验证。<var plainBytes = new byte[ccmMode.GetOutputSize(cipherText.Length)]
关于c# - 如何使用 Bouncy CaSTLe 解密 AES/CCM 加密密文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10396762/
我的 SEAL v2.3.1 中有这些 SEAL 设置: seal::EncryptionParameters parms; parms.set_poly_modulus("1x^2048 + 1")
我有一些使用 Perl 的 Crypt::CBC 加密的密文我希望在其他地方解密的模块。 密文是使用 Crypt::CBC 的“简单”版本生成的。构造函数,即: use Crypt::CBC; $ci
我在使用 CryptoPP 时遇到问题。我正在使用 AES,并且想通过将其编码为 base64 来表示二进制密文。 我的问题是我在运行以下代码时随机出现断言错误: std::string encode
据我所知,RSA 加密的输出将等于 key 模数的长度(在本例中为 128 字节)。我的 RSA 加密代码是: public byte [] RSAEncrypter () throws Except
情况: 我正在尝试从我的谷歌云存储桶中下载和解密一些数据。 对于加密和解密,我使用: https://cloud.google.com/kms/docs/quickstart#decrypt_data
我使用此 openssl 命令创建了一条加密消息: openssl enc -aes-256-cbc -salt -in plaintext.txt -out cipher.enc 我尝试过 Cryp
我正在尝试将 AES 加密的 Java 代码复制到 Golang 中。但是我在 golang 中没有得到相同的输出 我试过下面的代码: Java 代码: package EncryptionTest;
我通过 java 、 BouncyCaSTLe Provider 实现这个使用 block 模式 = ECB 和填充模式 = PKCS7Padding 我注意到,如果我加密32字节长度的数据(例如61
我看过类似的主题,但我找不到与我正在努力实现的目标完全相符的解决方案。 我有一个密文,需要根据每个字母在文本中出现的频率进行简单的字母替换。我已经有一个规范化文本的功能(小写,没有非字母字符,没有,计
我是一名优秀的程序员,十分优秀!