mirror of
https://github.com/QuasarApp/Qt-AES.git
synced 2025-04-27 06:04:32 +00:00
fix PKCS7 when text size is a multiple of block size
This commit is contained in:
parent
3d4c882683
commit
4a06e8728a
@ -34,7 +34,7 @@ QByteArray QAESEncryption::RemovePadding(const QByteArray &rawText, QAESEncrypti
|
||||
ret.remove(ret.length()-1, 1);
|
||||
break;
|
||||
case Padding::PKCS7:
|
||||
ret.remove(ret.length() - ret.at(ret.length()-1), ret.at(ret.length()-1));
|
||||
ret.remove(ret.length() - ret.back(), ret.back());
|
||||
break;
|
||||
case Padding::ISO:
|
||||
{
|
||||
@ -129,23 +129,25 @@ QAESEncryption::QAESEncryption(Aes level, Mode mode,
|
||||
QByteArray QAESEncryption::getPadding(int currSize, int alignment)
|
||||
{
|
||||
int size = (alignment - currSize % alignment) % alignment;
|
||||
if (size == 0) return QByteArray();
|
||||
switch(m_padding)
|
||||
{
|
||||
case Padding::ZERO:
|
||||
return QByteArray(size, 0x00);
|
||||
break;
|
||||
case Padding::PKCS7:
|
||||
return QByteArray(size,size);
|
||||
if (size == 0)
|
||||
size = alignment;
|
||||
return QByteArray(size, size);
|
||||
break;
|
||||
case Padding::ISO:
|
||||
return QByteArray (size-1, 0x00).prepend(0x80);
|
||||
if (size > 0)
|
||||
return QByteArray (size - 1, 0x00).prepend(0x80);
|
||||
break;
|
||||
default:
|
||||
return QByteArray(size, 0x00);
|
||||
break;
|
||||
}
|
||||
return QByteArray(size, 0x00);
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
QByteArray QAESEncryption::expandKey(const QByteArray &key)
|
||||
|
@ -197,7 +197,7 @@ void AesTest::OFB256String()
|
||||
QCOMPARE(inputStr, QString(decodedText));
|
||||
}
|
||||
|
||||
void AesTest::CBC256StringEven()
|
||||
void AesTest::CBC256StringEvenISO()
|
||||
{
|
||||
QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC);
|
||||
|
||||
@ -214,3 +214,20 @@ void AesTest::CBC256StringEven()
|
||||
QCOMPARE(QString(decodeText), decodedString);
|
||||
|
||||
}
|
||||
|
||||
void AesTest::CBC256StringEvenPKCS7()
|
||||
{
|
||||
QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC, QAESEncryption::PKCS7);
|
||||
|
||||
//16 byte string
|
||||
QString inputStr("1234567890123456");
|
||||
int blockLen = inputStr.length();
|
||||
QString key("123456789123");
|
||||
|
||||
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
|
||||
QByteArray encodeText = encryption.encode(inputStr.toLocal8Bit(), hashKey, iv);
|
||||
QByteArray decodeText = encryption.decode(encodeText, hashKey, iv);
|
||||
QByteArray padding = decodeText.remove(0, encryption.removePadding(decodeText).length());
|
||||
|
||||
QCOMPARE(padding.size(), blockLen);
|
||||
}
|
||||
|
@ -32,7 +32,8 @@ private slots:
|
||||
void OFB128Crypt();
|
||||
void OFB256String();
|
||||
|
||||
void CBC256StringEven();
|
||||
void CBC256StringEvenISO();
|
||||
void CBC256StringEvenPKCS7();
|
||||
|
||||
void cleanupTestCase(){}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user