相关疑难解决方法(0)

加密/解密在两个不同的openssl版本之间不能很好地工作

我已经下载并编译了openssl-1.1.0.

我可以加密,并使用相同的exe解密openssl(如这里)

me@ubuntu:~/openssl-1.1.0$ LD_LIBRARY_PATH=. ./apps/openssl aes-256-cbc -a -salt -in file.txt -out file.txt.enc
enter aes-256-cbc encryption password: 123
Verifying - enter aes-256-cbc encryption password:
me@ubuntu:~/openssl-1.1.0$ LD_LIBRARY_PATH=. apps/openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec
enter aes-256-cbc decryption password: 123
Run Code Online (Sandbox Code Playgroud)

openssl用于:libcrypto.so.1.1, libssl.so.1.1

当我尝试openssl使用我的ubuntu上安装的解密时,它使用: /lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

我收到一个错误:

me@ubuntu:~/openssl-1.1.0$ openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec2
enter aes-256-cbc decryption password: 123
bad decrypt
140456117421728:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:
Run Code Online (Sandbox Code Playgroud)

可能是什么原因导致的 谢谢

linux encryption openssl cryptography libssl

30
推荐指数
1
解决办法
1万
查看次数

使用aes_256_cbc密码加密时的默认IV是多少?

我在一个文件中生成了一个随机的256位对称密钥,用于使用OpenSSL命令行加密某些数据,我需要使用OpenSSL库以编程方式对其进行解密.我没有成功,我认为问题可能出在我正在使用(或不使用)的初始化向量中.

我使用以下命令加密数据:

/usr/bin/openssl enc -aes-256-cbc -salt -in input_filename -out output_filename -pass file:keyfile
Run Code Online (Sandbox Code Playgroud)

我正在使用以下调用来初始化数据的解密:

EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), nullptr, keyfile.data(), nullptr))
Run Code Online (Sandbox Code Playgroud)

keyfile是一个vector<unsigned char>保存密钥的32个字节.我的问题是关于最后一个参数.它应该是密码算法的初始化向量.加密时我没有指定IV,因此必须使用某些默认值.

为该参数传递nullptr是否意味着"使用默认值"?是否为默认值,并且没有任何内容添加到第一个密码块?

我应该提一下,我能够在不提供IV的情况下从命令行解密.

c++ encryption openssl aes block-cipher

14
推荐指数
2
解决办法
4497
查看次数

CryptoJS AES加密和Java AES解密

我只是问这个,因为我已经阅读了很多关于加密AES加密的帖子2天了,就在我以为我得到它的时候,我意识到我根本没有得到它.

这篇文章是我最接近我的问题,我有完全相同的问题,但没有答案:

CryptoJS AES加密和JAVA AES解密值不匹配

我尝试过很多方面,但我没有做对.

首先

我正在获取已经加密的字符串(我只获得了代码以了解它们是如何进行的),因此修改加密方式不是一种选择.这就是为什么所有类似的问题对我都没有用.

第二

我有权访问密钥,我可以修改它(所以如果需要,调整长度是一个选项).

加密在CryptoJS上完成,它们将加密的字符串作为GET参数发送.

GetParamsForAppUrl.prototype.generateUrlParams = function() {
const self = this;
 return new Promise((resolve, reject) => {
   const currentDateInMilliseconds = new Date().getTime();
   const secret = tokenSecret.secret;
   var encrypted = CryptoJS.AES.encrypt(self.authorization, secret);
   encrypted = encrypted.toString();
   self.urlParams = {
     token: encrypted,
     time: currentDateInMilliseconds
   };
   resolve();
 });
};
Run Code Online (Sandbox Code Playgroud)

我可以使用CryptoJS在javascript上轻松解密这个:

var decrypted = CryptoJS.AES.decrypt(encrypted_string, secret);
    console.log(decrypted.toString(CryptoJS.enc.Utf8)); 
Run Code Online (Sandbox Code Playgroud)

但出于安全考虑,我不想在Javascript上这样做,所以我试图在Java上解密它:

String secret = "secret";
byte[] cipherText = encrypted_string.getBytes("UTF8");
SecretKey secKey = new SecretKeySpec(secret.getBytes(), "AES");
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography cryptojs

12
推荐指数
1
解决办法
2万
查看次数

Java相当于OpenSSL AES CBC加密

我不是加密技术专家,特别是由于OpenSSL有很多缺少的文档,我不知道如何解决这个问题.

我有一个外部系统,希望接收加密的消息.提供的唯一示例以这种方式使用OpenSSL:

$ openssl enc -aes-256-cbc -a -in t.txt -k testpass
U2FsdGVkX1/RUdaSJKRXhHv3zUyTsQwu5/ar2ECKDlrNyH5GL4xRR4fgxkiWqkS1
cQstcoSIgWfRPSOFj/5OtdNLeNXiVR6MxSKJ+NvS9LyUD8+Rg6XIcYUvxR4gHi3w
DWT44LAMCpRAh1Q0t4Z2g7rwb0D05T6ygLaWvB5zD/xGZD3brTqSlWmiJb9Imgda
M6soZO7BhbYdqWqEUl5r6+EbkD21f6L3NX3hJFo+BJ+VFctiAlBO8NwT5l4ogo/s
GErm8gqRr57XoX/kvKAimg==
Run Code Online (Sandbox Code Playgroud)

t.txt文件包含这个字符串在一行:

AMOUNT=10&TID=#19:23&CURRENCY=EUR&LANGUAGE=DE&SUCCESS_URL=http://some.url/sucess&ERROR_URL=http://some.url/error&CONFIRMATION_URL=http://some.url/confirm&NAME=customer full name`
Run Code Online (Sandbox Code Playgroud)

我找到另一个问题,我已经能够使用以下代码进行加密:

String password = "passPhrase";
String salt = "15charRandomSalt";
int iterations = 100;

/* Derive the key, given password and salt. */
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(Charset.forName("UTF8")), iterations, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

/* Encrypt the message. */
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters …
Run Code Online (Sandbox Code Playgroud)

java encryption openssl cryptography

9
推荐指数
2
解决办法
1万
查看次数

解密java中使用openssl加密的文件

使用以下命令对文件进行加密:

openssl enc -aes-256-cbc -in file.txt -out file_enc.txt -k 1234567812345678
Run Code Online (Sandbox Code Playgroud)

使用以下命令解密该文件:

openssl enc -d -aes-256-cbc -in file_enc.txt -out file.txt -k 1234567812345678
Run Code Online (Sandbox Code Playgroud)

在java中打印盐和密钥后我得到:

密钥=b796fbb416732ce13d39dbb60c0fb234a8f6d70e49df1c7e62e55e81d33a6bff774254ac99268856bf3afe0b95defdad

在 cmd 中我得到:

盐=2D7C7E1C84BD6693密钥=B796FBB416732CE13D39DBB60C0FB234A8F6D70E49DF1C7E62E55E81D33A6BFF

=774254AC99268856BF3AFE0B95DEFDAD

运行后:

openssl enc -aes-256-cbc -in file.txt -out file_enc.txt -pbkdf2 -k 1234567812345678 -p

我正在使用以下代码,但正在打印加密文件:

public static void main(String args[]) throws InvalidKeySpecException,
                                              NoSuchAlgorithmException,
                                              IllegalBlockSizeException,
                                              InvalidKeyException,
                                              BadPaddingException,
                                              InvalidAlgorithmParameterException,
                                              NoSuchPaddingException,
                                              IOException {
    String password = "1234567812345678";
    String algorithm = "AES/CBC/PKCS5Padding";
    IvParameterSpec ivParameterSpec = AESUtil.generateIv();
    Resource resource = new ClassPathResource("file_enc.txt");
    File inputFile = resource.getFile();
    byte[] salt = …
Run Code Online (Sandbox Code Playgroud)

java encryption openssl jca

-1
推荐指数
1
解决办法
859
查看次数

标签 统计

encryption ×5

openssl ×4

cryptography ×3

java ×3

aes ×1

block-cipher ×1

c++ ×1

cryptojs ×1

jca ×1

libssl ×1

linux ×1