簡體   English   中英

如何使用openssl解密Java-DES加密的消息?

[英]How do I decrypt a Java-DES-encrypted message using openssl?

由於問題標題是不言自明的,因此請考慮以下代碼:

private static final String ALGORITHM = "DES";
private static final String MESSAGE = "This is an extremely secret message";
private static final byte[] key = { 0, 1, 2, 3, 4, 5, 6, 7 };

...

// Do encryption
final Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(ENCRYPT_MODE, new SecretKeySpec(key, ALGORITHM));
final byte[] encrypted = cipher.doFinal(MESSAGE.getBytes());

// Copy the encrypted message to a file
final InputStream inputStream = new ByteArrayInputStream(encrypted);
final OutputStream outputStream = new FileOutputStream("___SECRET");
copy(inputStream, outputStream);

現在,我嘗試使用以下命令解密___SECRET文件:

openssl enc -d -des -K 0001020304050607 -iv 0 -in ___SECRET -out ___OPEN

結果是:

bad decrypt
3073636028:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:

只是解密了第一個塊(8個字節),其余塊處於垃圾狀態(OEM編碼):

This is MЕ$S6%@╢Т√°ў╝°╢]∙iь

我在做什么錯,如何使用openssl解密加密的消息?

在Java上,您以ECB模式使用DES,而在OpenSSL上,您以CBC模式使用DES(存在IV)。

這是一個很大的不同,因為在CBC中,塊是鏈接的-因此,第一個塊被正確解密,但隨后的所有塊都被加密。

您可以更改Java部分以改為使用“ DES / CBC”模式,並提供IV或更改openssl部分,並使用-des-ecb代替-des

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM