cbc加密
o little_qd:
您的這句話:只有CBC模式,key PKCS5Padding iv對應時,Java與其他語言的演算法才兼容
請問怎麼理解呢?
是否只有cbc模式,並且只有PKCS5Padding的補位方式,java des出來的結果才和其他的相同,是這樣嗎??
如果是這樣的話,要達到和其他語言相同的結果,是不是就得自己重寫這個des的演算法?
『貳』 AES共有ECB,CBC,CFB,OFB,CTR五種模式分別有什麼區別
轉:
JCE中AES支持五中模式:CBC,CFB,ECB,OFB,PCBC;支持三種填充:NoPadding,PKCS5Padding,ISO10126Padding。不支持SSL3Padding。不支持「NONE」模式。
其中AES/ECB/NoPadding和我現在使用的AESUtil得出的結果相同(在16的整數倍情況下)。
不帶模式和填充來獲取AES演算法的時候,其默認使用ECB/PKCS5Padding。
演算法/模式/填充
16位元組加密後數據長度 不滿16位元組加密後長度
AES/CBC/NoPadding
16
不支持
AES/CBC/PKCS5Padding
32
16
AES/CBC/ISO10126Padding
32
16
AES/CFB/NoPadding
16
原始數據長度
AES/CFB/PKCS5Padding
32
16
AES/CFB/ISO10126Padding
32
16
AES/ECB/NoPadding
16
不支持
AES/ECB/PKCS5Padding
32
16
AES/ECB/ISO10126Padding
32
16
AES/OFB/NoPadding
16
原始數據長度
AES/OFB/PKCS5Padding
32
16
AES/OFB/ISO10126Padding
32
16
AES/PCBC/NoPadding
16
不支持
AES/PCBC/PKCS5Padding
32
16
AES/PCBC/ISO10126Padding
32
16
可以看到,在原始數據長度為16的整數倍時,假如原始數據長度等於16*n,則使用NoPadding時加密後數據長度等於16*n,其它情況下加密數據長度等於16*(n+1)。在不足16的整數倍的情況下,假如原始數據長度等於16*n+m[其中m小於16],除了NoPadding填充之外的任何方式,加密數據長度都等於16*(n+1);NoPadding填充情況下,CBC、ECB和PCBC三種模式是不支持的,CFB、OFB兩種模式下則加密數據長度等於原始數據長度。
『叄』 openssl 中調用哪個函數實現16位元組des密鑰cbc方式加密數據
使用OpenSSL的EVP介面實現des128加密的邏輯流程如下:
// 初始化上下文數據結構,指定演算法(EVP_des_ede_cbc)、密鑰(key)、初始化向量(initVector)
//
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx, EVP_des_ede_cbc(), NULL, key, initVector);
......
// 加數的中間過程調用EVP_EncryptUpdate,pInBuffer、inSize指定要加密的明文和長度。
// 函數從pOutBuffer,outSize中返回加密後的密文和長度。
// 可以反復調用該API加密多個數據塊。注意所有EVP函數是失敗時返回0值。
//
ret = EVP_EncryptUpdate(&ctx, pOutBuffer, &outSize, pInBuffer, inSize);
if (0 == ret) goto ErrorExit;
......
// 在所有數據塊加密完成後調用Final函數取得最後的對齊數據。
//
ret = EVP_EncryptFinal_ex(&ctx, pOutBuffer, &outSize);
if (0 == ret) goto ErrorExit;
......
// 最後返回的時候別忘了釋放資源。
ErrorExit:
EVP_CIPHER_CTX_cleanup(&ctx);
return ret;
解密過程與上面一樣,只是中間調用的函數分別變成EVP_DecryptInit_ex、EVP_DecryptUpdate和EVP_DecryptFinal_ex。OpenSSL EVP介面的相關說明可以去查官方文檔或請教網路老師。
『肆』 DES加密演算法CBC模式怎麼解密最好有程序 謝謝~(*^__^*)
原型:
int WINAPI icePub_desEncryptionHex(char *strInputHexstring, char *strOutputHexstring, char *strKeyHexstring)
輸入:strInputHexstring 待加密16進制數據串,16位元組長度
strKeyHexstring 單des密鑰16進制串,16位元組長度
輸出:strOutputHexstring 加密後16進制數據串,16位元組長度
原型:
int WINAPI icePub_desDecryptionHex(char *strInputHexstring, char *strOutputHexstring, char *strKeyHexstring)
輸入:strInputHexstring 待解密16進制數據串,16位元組長度
strKeyHexstring 單des密鑰16進制串,16位元組長度
輸出:strOutputHexstring 解密後16進制數據串,16位元組長度
『伍』 加密演算法 AES_256_CBC 安全性如何
舉個例子:在一萬億台,每秒可以嘗試十億個密鑰的計算機上,要超過二十億年才能破解出一個AES-128密鑰。
128位的都如此了,256的可想而知。
除非密鑰長度非常短,否則暴力破解不存在可行性。
『陸』 在DES加密里邊,ECB和CBC有什麼區別
一、優點不同:
ECB模式
1、簡單;
2、有利於並行計算;
3、誤差不會被傳送;
CBC模式:
1、不容易主動攻擊,安全性好於ECB,適合傳輸長度長的報文,是SSL、IPSec的標准。
二、缺點不同:
ECB模式
1、不能隱藏明文的模式;
2、可能對明文進行主動攻擊;
CBC模式:
1、不利於並行計算;
2、誤差傳遞;
3、需要初始化向量IV
三、概念不同
1、ECB模式又稱電子密碼本模式:Electronic codebook,是最簡單的塊密碼加密模式,加密前根據加密塊大小(如AES為128位)分成若干塊,之後將每塊使用相同的密鑰單獨加密,解密同理。
2、密碼分組鏈接(CBC,Cipher-block chaining)模式,由IBM於1976年發明,每個明文塊先與前一個密文塊進行異或後,再進行加密。在這種方法中,每個密文塊都依賴於它前面的所有明文塊。同時,為了保證每條消息的唯一性,在第一個塊中需要使用初始化向量IV。
(6)cbc加密擴展閱讀:
1976年,IBM發明了密碼分組鏈接(CBC,Cipher-block chaining)模式。在CBC模式中,每個明文塊先與前一個密文塊進行異或後,再進行加密。在這種方法中,每個密文塊都依賴於它前面的所有明文塊。同時,為了保證每條消息的唯一性,在第一個塊中需要使用初始化向量。
若第一個塊的下標為1,則CBC模式的加密過程為:
Ci = Ek (P ⊕ Ci-1), C0 = IV.
而其解密過程則為:
Pi = Dk (Ci) ⊕Ci-1, C0 = IV.
CBC是最為常用的工作模式。它的主要缺點在於加密過程是串列的,無法被並行化,而且消息必須被填充到塊大小的整數倍。解決後一個問題的一種方法是利用密文竊取。
注意在加密時,明文中的微小改變會導致其後的全部密文塊發生改變,而在解密時,從兩個鄰接的密文塊中即可得到一個明文塊。因此,解密過程可以被並行化,而解密時,密文中一位的改變只會導致其對應的明文塊完全改變和下一個明文塊中對應位發生改變,不會影響到其它明文的內容。
『柒』 關於C#和JAVA的AES加密CBC模式下,加密出來的結果不相同,求幫助
可能轉碼方式不一樣。。
『捌』 CBC加密Padding的字元串在解密時怎麼清除最方便
這一串是base64加密過的內容,解出來是: 這又是一串MD5密文,不可以解。在線查的MD5庫里目前也沒記錄此值,只能慢慢破了。