编程语言
首页 > 编程语言> > C#Split byte []数组

C#Split byte []数组

作者:互联网

我正在进行RSA加密,我必须将长字符串拆分为小字节[]并加密它们.然后我组合数组并转换为字符串并写入安全文件.

然后加密创建字节[128]

我使用以下结合:

public static byte[] Combine(params byte[][] arrays)
{
    byte[] ret = new byte[arrays.Sum(x => x.Length)];
    int offset = 0;
    foreach (byte[] data in arrays)
    {
        Buffer.BlockCopy(data, 0, ret, offset, data.Length);
        offset += data.Length;
    }
    return ret;
}

当我解密时,我接受字符串,将其转换为byte []数组,现在需要将其拆分以解码块然后转换为字符串.

有任何想法吗?

谢谢

编辑:

我认为我现在有分裂工作,但解密失败了.这是因为RSA密钥等吗?在TimePointA它加密它,然后在TimePointB它尝试解密它失败.公钥是不同的,所以不确定是否是问题.

解决方法:

解密时,可以为解密缓冲区创建一个数组并重用它:

此外,通常RSA用于加密AES等对称密钥,对称算法用于加密实际数据.对于长于1个密码块的任何内容,这都要快得多.要解密数据,可以使用RSA解密对称密钥,然后使用该密钥解密数据.

byte[] buffer = new byte[BlockLength];
// ASSUMES SOURCE IS padded to BlockLength
for (int i = 0; i < source.Length; i += BlockLength)
{
    Buffer.BlockCopy(source, i, buffer, 0, BlockLength);
    // ... decode buffer and copy the result somewhere else
}

编辑2:如果要将数据存储为字符串而不是原始字节,请使用Convert.ToBase64String()和Convert.FromBase64String()作为最安全的转换解决方案.

编辑3:从他的编辑:

private static List<byte[]> splitByteArray(string longString)
{
    byte[] source = Convert.FromBase64String(longString);
    List<byte[]> result = new List<byte[]>();

    for (int i = 0; i < source.Length; i += 128)
    {
        byte[] buffer = new byte[128];
        Buffer.BlockCopy(source, i, buffer, 0, 128);
        result.Add(buffer);
    }
    return result;
}

标签:c,arrays,split,bytearray,c-3-0
来源: https://codeday.me/bug/20190607/1192638.html