密码学作业——C++实现AES

  1. Write codes to implement the extended Euclid algorithm to determine the inverse of a given integer.
  2. Implement the AES algorithm, and submmit the codes and a report to introduce your program by using some test cases.

运行截图

验证

1、在线验证http://tool.chacuo.net/cryptaes

2、使用高级语言提供的类库验证

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        AesCryptoServiceProvider provider = new AesCryptoServiceProvider
        {
            Mode = CipherMode.ECB,
            Padding = PaddingMode.Zeros,
            Key = Encoding.ASCII.GetBytes("1234567890123456")
        };
        using (MemoryStream memoryStream = new MemoryStream())
        using (CryptoStream cryptoStream = new CryptoStream(memoryStream, provider.CreateEncryptor(), CryptoStreamMode.Write))
        {
            byte[] plainBytes = Encoding.GetEncoding("GB2312").GetBytes("HelloWorldHelloWorldHelloWorldHelloWorld");
            cryptoStream.Write(plainBytes, 0, plainBytes.Length);
            cryptoStream.FlushFinalBlock();
            string hexString = ByteArrayToHexString(memoryStream.ToArray());
            Console.WriteLine(hexString);
        }
        Console.ReadLine();
    }
    public static string ByteArrayToHexString(byte[] data)
    {
        StringBuilder sb = new StringBuilder();
        foreach (byte b in data)
        {
            sb.Append(((int)b).ToString("X2"));
        }
        return sb.ToString().ToUpper();
    }
}

完整代码

实验环境:VS2010

已知bug:输入密钥长度不足16个字符(128位)时,加密结果不正确,是由于没有对密钥不足部分进行填充导致

另外,跟上一个实验一样,new之后没有delete,所以会有内存泄漏(C#写习惯了)

https://wwa.lanzous.com/b00tmhpmb
密码:2rbd

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值