热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

填充字节[]到16字节倍数用于AES加密-Padbyte[]to16-bytemultipleforAESEncryption

Icurrentlyhaveafunction[C#]whichtakesabyte[]andanalignmenttosetitto,butduringencr

I currently have a function [C#] which takes a byte[] and an alignment to set it to, but during encryption, an error is thrown every once in awhile.

我目前有一个函数[C#],它接受一个byte []和一个对齐来设置它,但在加密过程中,每隔一段时间就抛出一个错误。

    private byte[] AlignByteArray(byte[] content, int alignto)
    {
        long thelength = content.Length - 1;
        long remainder = 1;

        while (remainder != 0)
        {
            thelength += 1;
            remainder = thelength % alignto;
        }
        Array.Resize(ref content, (int)thelength);
        return content;
    }

Does anyone see any issues with the function? I'm getting errors that the content size is not valid during AES encryption, suggesting that it is not padding right.

有没有人看到该功能有任何问题?我收到的错误是AES加密期间内容大小无效,表明它没有正确填充。

2 个解决方案

#1


Here's a simple solution:

这是一个简单的解决方案:

private static void PadToMultipleOf(ref byte[] src, int pad)
{
    int len = (src.Length + pad - 1) / pad * pad;
    Array.Resize(ref src, len);
}

#2


Are you sure it's 0x16 and not 16? (I thought it was 16 so I'm assuming that).

你确定它是0x16而不是16吗? (我以为它是16,所以我假设)。

Edit: Any decent compiler should turn (x / 16) into (x >> 4).

编辑:任何体面的编译器都应该将(x / 16)转换为(x >> 4)。

int length = 16 * ((content.Length + 15) / 16);
Array.Resize(ref content, length);

Edit 2: For general purpose:

编辑2:用于一般目的:

int length = alignment * ((content.Length + alignment - 1) / alignment);
Array.Resize(ref content, length);

推荐阅读
author-avatar
雪恝1988_757
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有