コード例 #1
0
ファイル: main.c プロジェクト: vol4ok/micro-aes
int main(int argc, char* argv[])
{
	aes_context_t aes_ctx;
	aes_init(&aes_ctx);
	aes_set_key(&aes_ctx, s_key);
	//aes_encrypt(&aes_ctx, s_in, s_enc);
	//aes_decrypt(&aes_ctx, s_enc, s_dec);
	aes_encrypt_ctr(&aes_ctx, s_in, s_enc, sizeof(s_in), s_iv);
	aes_decrypt_ctr(&aes_ctx, s_enc, s_dec, sizeof(s_in), s_iv);
	return 0;
}
コード例 #2
0
ファイル: qaeswrap.cpp プロジェクト: danian-hn/QAes
bool QAesWrap::encrypt(const QByteArray & in, QByteArray & out, AesMode mode,PaddingMode pad) const
{
    if (in.isEmpty()) return false;
    out.clear();
    switch (mode) {
    case AES_CTR:
        out.resize(in.size());
        aes_encrypt_ctr((unsigned char *)in.data(),in.size(),(unsigned char *)out.data(),mpass,mbit,msalt);
        break;
    case AES_ECB:
    case AES_CBC:
        initPadding(in,out,mode,pad);
        break;
    default:
        return false;
    }
    return true;
}
コード例 #3
0
ファイル: qaeswrap.cpp プロジェクト: danian-hn/QAes
bool QAesWrap::decrypt(const QByteArray & in, QByteArray & out, AesMode mode,PaddingMode pad) const
{
    if (in.isEmpty()) return false;
    out.clear();
    int size = in.size();
    out.resize(size);
    if (mode == AES_CTR) {
        aes_encrypt_ctr((unsigned char *)in.data(),size,(unsigned char *)out.data(),mpass,mbit,msalt);
        return true;
    }
    int last = size % AES_BLOCK_SIZE;
    int blocks = size / AES_BLOCK_SIZE;
    int useSize = blocks * AES_BLOCK_SIZE;
    if (blocks == 0 ) {
        out = in;
        return false;
    }
    QByteArray tdata;
    if (last > 0) {
        if(pad == ANSIX923 || pad == PKCS7) {
            out.clear();
            return false;
        }
        tdata = in.right(last);
    }


    switch (mode) {
    case AES_ECB:
        ecbdecrypt((unsigned char *)in.data(),useSize,out);
        break;
    case AES_CBC:
        aes_decrypt_cbc((unsigned char *)in.data(),useSize,(unsigned char *)out.data(),mpass,mbit,msalt);
        break;
    default:
        return false;
    }
    if (last > 0) {
        for (int i = useSize, j = 0; i < size; ++i,++j) {
            out[i] = tdata.at(j);
        }
    } else {
        char ch = out.at(size-1);
        if (ch < 16) { //验证是否需要移除。
            int removed = 0;
            int tsize = size - ch;
            bool isPad = true;
            if (pad == ANSIX923) {
                int mysize = size - 1;
                char tch;
                for (int i = tsize; i < mysize; ++i) {
                    tch = out.at(i);
                    if (tch != char(0x00)) {
                        isPad = false;
                    }
                }
                if (isPad) removed = ch;
            } else {
                char tch;
                for (int i = tsize; i < size; ++i) {
                    tch = out.at(i);
                    if (tch != ch) {
                        isPad = false;
                    }
                }
                if (isPad) removed = ch;
            }
            if (removed > 0) {
                out.remove(size - removed,removed);
            }
        }
    }

    return true;
}