使用BouncyCastle实现TEA算法

时间:2011-08-19 17:23:01

标签: c# encryption bouncycastle

我试图将使用BouncyCastle的RSA算法的HåvardStranden示例(http://ox.no/posts/rsa-using-bouncycastle)改编成TEA算法,同时使用BouncyCastle附带的示例,我制作了以下代码来加密我的字符串:

byte[] data = Encoding.UTF8.GetBytes("This is an encoding test!!!...");

TeaEngine e = new TeaEngine();
e.Init(true, new KeyParameter(Encoding.UTF8.GetBytes("MyPassword")));

int blockSize = e.GetBlockSize();

byte[] outBytes = new byte[data.Length];

List<byte> output = new List<byte>();
for (int chunkPosition = 0; chunkPosition < data.Length; chunkPosition += blockSize)
{
    int chunkSize = Math.Min(blockSize, data.Length - (chunkPosition * blockSize));
    if (e.IsPartialBlockOkay)
    {
            e.ProcessBlock(data, chunkPosition, outBytes, chunkPosition);
    }
    else
    {
            e.ProcessBlock(data, chunkPosition, outBytes, chunkPosition);
    }
}

Console.WriteLine("Encrypted: " + Encoding.UTF8.GetString(output.ToArray()));

但我总是收到错误。关于如何实现它的任何想法?

提前致谢

编辑:很抱歉没有发布错误日志,但我稍后发布了这个并忘记了它

这里有: 在e.Init(true,new KeyParameter(Encoding.UTF8.GetBytes(“MyPassword”)));我得到一个“索引超出了数组的范围。”

1 个答案:

答案 0 :(得分:1)

TEA使用128位密钥,即16字节。使用16字节长的密码(或使用密钥派生函数从较短的密码获取16字节密钥):

e.Init(true, new KeyParameter(Encoding.UTF8.GetBytes("MyPassword123456")));