标签: encryption-symmetric

使用 BouncyCastle 解密 Rijndael 256 块大小

我们有一个用于加密的辅助类,老实说,它可能是多年前从 Stack Overflow 复制的。

目前,我们正尝试将部分代码移植到 .NET Core,但我们发现它不起作用,因为 .NET Core 实现RijndaelManaged不支持 256 块大小。从我读到的内容来看,BouncyCastle 似乎仍然应该支持它,但我无法让它工作。“未加密”的文本只是一堆乱码。我确定我做错了什么,但对于我的生活,我无法弄清楚这一点。

这是该类的原始 .Net Framework 版本:

internal static class StringEncryptor
{
    private const int Keysize = 256;
    private const int _iterations = 1000;
    private const int _hashLenth = 20;

    public static string Encrypt(string plainText, string superSecretPassPhrase)
    {
        // Salt and IV is randomly generated each time, but is preprended to encrypted cipher text
        // so that the same Salt and IV values can be used when decrypting. …
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle encryption-symmetric

4
推荐指数
1
解决办法
1418
查看次数

尝试使用 openssl/golang 解密已在 Rails 中加密的字符串

我正在尝试解密已在我的 Rails 项目中加密的字符串。这就是我加密数据的方式:

def encrypt_text(text_To_encrypt)
        # 0. generate the key using command openssl rand -hex 16 on linux machines
        # 1. Read the secret from config
        # 2. Read the salt from config
        # 3. Encrypt the data
        # 4. return the encypted data
        # Ref: http://www.monkeyandcrow.com/blog/reading_rails_how_does_message_encryptor_work/
        secret = Rails.configuration.miscconfig['encryption_key']
        salt = Rails.configuration.miscconfig['encryption_salt']
        key = ActiveSupport::KeyGenerator.new(secret).generate_key(salt, 32)
        crypt = ActiveSupport::MessageEncryptor.new(key)
        encrypted_data = crypt.encrypt_and_sign(text_To_encrypt)
        encrypted_data
end
Run Code Online (Sandbox Code Playgroud)

现在的问题是我无法使用 openssl 解密它。它只是显示了糟糕的幻数。一旦我在 open ssl 中做到了这一点,我的计划就是在 golang 中解密它。

以下是我尝试使用 openssl 解密它的方法:

openssl enc -d -aes-256-cbc …
Run Code Online (Sandbox Code Playgroud)

ruby openssl ruby-on-rails encryption-symmetric

4
推荐指数
1
解决办法
2017
查看次数

Delphi 7 - DCPCrypt - TDCP_rijndael - DecryptString - 如何使其工作?

我正在 PHP 中加密文本(openssl_encrypt / 'aes-256-cbc'),然后尝试在 Delphi 7 中解密(DCPCrypt / TDCP_rijndael)。

PHP脚本文件以ANSI编码保存,希望传输的字符串(它是REST API Web服务)与Delphi兼容。

然而,Delphi 解密产生了错误的结果,我猜测代码中有问题。如果您能看一下并发现我在 Delphi 方面的错误,我将不胜感激:

PHP代码:

function encrypt($key, $payload) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($payload, 'aes-256-cbc', $key, 0, $iv);
    return base64_encode($encrypted . '::' . $iv);
}

function decrypt($key, $garble) {
        list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2);
        return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
}
Run Code Online (Sandbox Code Playgroud)

德尔福代码:

var
  DCP_rijndael: TDCP_rijndael;

const
  cPASSWORD = 'myownpassword';

function Decrypt(AStr: string): string;
var
  d, s, iv: String;
  p: Integer;
begin
  d := Base64DecodeStr(AStr);
  p …
Run Code Online (Sandbox Code Playgroud)

delphi encryption delphi-7 encryption-symmetric php-openssl

4
推荐指数
1
解决办法
2994
查看次数

为什么在对对称算法的蛮力攻击中,尝试一半后有 50% 的机会找到密钥?

任何密码学文本都提到,在对对称算法的蛮力攻击中,在尝试一半后有 50% 的机会找到密钥。

例如,具有 56 位密钥的 DES 在前 2 55 次尝试后将有 50% 的机会找到密钥。

为什么在对任何对称加密算法的蛮力攻击中,尝试一半后有 50% 的机会找到密钥?它的数学证明是什么?

encryption cryptography symmetric-key encryption-symmetric

3
推荐指数
1
解决办法
1568
查看次数

使用 Rfc2898DeriveBytes 类获取 Key 和 IV

我刚刚开始熟悉加密和 .NET 框架。在查看了许多示例之后,我看到了一个重复的模式,在使用 .NET Class 时会让人感到困惑Rfc2898DeriveBytes。使用此类获取加密密钥和初始化向量时,似乎使用了相同的方法。

以下是MSDN 博客中的一些代码,用于演示获取密钥和初始化向量。

byte[] salt = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes("P@$$w0rd", salt, 1000);

// generate an RC2 key
byte[] key = pwdGen.GetBytes(16);
byte[] iv = pwdGen.GetBytes(8);
Run Code Online (Sandbox Code Playgroud)

我在其他地方也看到过这个。我想我会认为它会是这样的......

// generate an RC2 key
byte[] key = pwdGen.GetKey();
byte[] iv = pwdGen.GetInitializationVector();
Run Code Online (Sandbox Code Playgroud)

我一定在这里遗漏了一些东西。如果密钥和初始化向量 (IV) 只是随机数,那么在使用正确的密码和盐时如何再次获得它们?

.net encryption encryption-symmetric initialization-vector

3
推荐指数
1
解决办法
2926
查看次数

是否有两个关键的对称交换加密函数?

我想知道是否有一些强大的(如AES等)加密功能,如下所示:

  • 对称的
  • 2个键:明文 - > 2个键 - >加密文本,但它必须与键的顺序无关,即

Key1(Key2(明文))== Key2(Key1(明文))例如"可交换"(也需要解密 - 你需要两个密钥,无关紧要)

谢谢

encryption cryptography encryption-symmetric

3
推荐指数
1
解决办法
3239
查看次数

java.security.InvalidKeyException:密钥长度不是128/192/256位

我是Java的新手,正在尝试使用AES-128对称加密的混合加密技术,然后在生成的对称密钥上使用RSA-1024非对称加密.有人可以帮助我为什么会得到这个例外.我已经关注了其他帖子,并在相应的文件夹中下载了Java Cryptography Extension(JCE)Unlimited Strength Jurisdiction Policy Files第6版.

Code snippet:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.security.Key;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;

    public class MainClass {

        /**
         * @param args
         * Encryption and Decryption with AES/ECB/PKCS7Padding  and RSA/ECB/PKCS1Padding
         */
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());   
            System.out.println("Enter a Message to be encrypted!");
            // Read an input from console
            InputStreamReader …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography public-key-encryption encryption-symmetric

3
推荐指数
1
解决办法
9325
查看次数

使用 PyCrypto 加密/解密大文件 - 策略

我目前正在尝试学习一些关于加密的东西,它的算法以及它是如何工作的。我正在考虑一种加密大文件的方法,对我来说唯一可行的方法似乎是使用对称密钥算法。

所以我在看 AES,虽然将 64k 或 32k 字节块传递给您使用密码哈希创建的 AES 对象似乎没问题,但我仍然很好奇最安全的方法来做到这一点,因为我一直在阅读密码学很容易搞砸。

所以我得到了一个密码,我得到了它的 SHA256 校验和,我在创建我的加密/解密对象时使用它作为密钥。

我找不到答案的其他事情:我应该使用 IV 吗?如果是这样,我必须确保对象在解密时使用与加密时相同的 IV...我该怎么做?

为什么我看到这里有人说即使字节数可以被 16 整除,你也应该填充文件的最后一个块?

最好使用哪种类型的加密模式?

您能否推荐任何其他资源来了解有关安全/密码学的更多信息?

先感谢您

python security encryption encryption-symmetric

3
推荐指数
1
解决办法
2551
查看次数

AES CBC 中的填充

我正在尝试在 C# 中使用(128 位 AES)使用 Random IV 测试 CBC。

在我要解决的问题中,我有 12 字节的输入消息。条件是,如果 PlainText 小于块大小(16 字节),则要使用的填充从 0x01 开始,然后到 6 0x00。

例子:

in ASCII PT     = Pay Bob 100%

in hex PT       = 50 61 79 20 42 6f 62 20 31 30 30 24

PT with Padding = 50 61 79 20 42 6f 62 20 31 30 30 24 01 00 00 00
Run Code Online (Sandbox Code Playgroud)

我似乎无法在RijndaelManaged 中找到这个PaddingMode

任何人都可以建议我如何执行以下操作吗?

  • 可变长度填充

编辑:

public class CBC
{
    public CBC()
    {

    } …
Run Code Online (Sandbox Code Playgroud)

c# cryptography encryption-symmetric rijndaelmanaged cbc-mode

3
推荐指数
1
解决办法
8464
查看次数

Azure 的 Key Vault 是否支持对称密钥加密?

我将不胜感激关于以下方面的澄清和建议:

我的项目要求我在 Nodejs 环境中使用对称数据加密(使用 AES)来保护数据库 (mongodb) 上的数据。理想情况下,我想这样做:

将对称密钥作为密钥存储在 Azure 密钥保管库中,然后对保管库进行“加密”调用,以使用密钥对数据执行 AES 加密。加密数据作为对我的应用程序的响应发送,然后以加密形式存储在数据库中。

在阅读了 MS Azure 的文档和相关博客文章后,我感到很困惑,其中一些消息来源声称支持对称密钥加密,但没有关于此的官方文档。

任何人都可以建议这是否是 Azure Key Vault 支持的所有密钥类型和算法的详尽列表? https://msdn.microsoft.com/en-us/library/azure/dn903623.aspx#BKMK_KeyTypes

这似乎也是一个选项(http://www.nuget.org/packages/Microsoft.Azure.KeyVault.extensions),但仅适用于 .NET 上的环境。喜欢 Nodejs 吗?

如果目前确实不支持对称密钥/加密,那么任何人都可以为我的上述方法提供替代方法吗?

谢谢,非常感谢。

aes encryption-symmetric node.js azure-keyvault

3
推荐指数
1
解决办法
3341
查看次数