5

我正在做 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 它尝试解密但失败了。公钥不同,所以不确定这是否是问题所在。

4

5 回答 5

4

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

此外,通常 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;
}
于 2009-07-22T08:56:25.153 回答
3

我会说这样的事情会做到:

        byte[] text = Encoding.UTF8.GetBytes(longString);
        int len = 128;

        for (int i = 0; i < text.Length; )
        {
            int j = 0;
            byte[] chunk = new byte[len];
            while (++j < chunk.Length && i < text.Length)
            {
                chunk[j] = text[i++];
            }
            Convert(chunk); //do something with the chunk
        }
于 2009-07-22T08:56:42.093 回答
0

为什么需要将字符串分成可变长度的块?固定长度的块,或者根本没有块,会大大简化这个过程。

于 2009-07-22T08:54:23.067 回答
0

“公钥不同”?

您使用私钥加密,并使用与私钥对应的公钥解密。

其他任何事情都会让你胡言乱语。

于 2009-07-22T09:01:17.670 回答
0

为什么不使用框架而不是自己做字节的东西呢?

http://www.codinghorror.com/blog/archives/001275.html

于 2009-07-22T10:29:55.353 回答