我试图将使用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”)));我得到一个“索引超出了数组的范围。”
答案 0 :(得分:1)
TEA使用128位密钥,即16字节。使用16字节长的密码(或使用密钥派生函数从较短的密码获取16字节密钥):
e.Init(true, new KeyParameter(Encoding.UTF8.GetBytes("MyPassword123456")));