在Image中实现AES加密

时间:2017-03-30 09:13:33

标签: c# aescryptoserviceprovider

if (i < 1 && j < textBox3.TextLength)
{
    char letter = Convert.ToChar(textBox3.Text.Substring(j, 1));
    // int value = Convert.ToInt32(letter);
    //Encryption Mechanism here
    AesCryptoServiceProvider aesCSP = new AesCryptoServiceProvider();
    int quote = Convert.ToInt32(textBox3.Text);
    string quote1 = Convert.ToString(quote) + 12;
    aesCSP.GenerateKey();
    aesCSP.GenerateIV();
    byte[] encQuote = EncryptString(aesCSP, quote1);
    string enc = Convert.ToBase64String(encQuote);
    int nerd = Convert.ToInt32(enc);
    img.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, nerd));
}

这里我试图对我希望从用户输入的字符串实施AES加密,然后我将这些加密值存储在整数数组中。我的问题是,在将字符串转换为int变量后,即使很难,我也无法将该int值放入setpixel()方法。

2 个答案:

答案 0 :(得分:0)

Color.FromArgb( int alpha, int red, int green, int blue)州的documentation

  

虽然此方法允许为每个传递32位值   组件,每个组件的值限制为8位。

您没有说明运行代码时nerd的值是什么,而且您实际上也没有说明问题是什么,但这是使用此方法的人的常见问题,而不是了解存在这种限制。

检查您的代码,调试并在致电Color.FromArgb时提出断点并注意此限制。

答案 1 :(得分:0)

编辑:

首先,定义加密和解密String的方法。这里有一个很好的例子:https://stackoverflow.com/a/27484425/7790901

这些方法将返回Base64字符串,这些字符串仅由ASCII字符组成,其值可以转换为0到127之间的数字,对RGB值(0到255)有效。

然后,

将加密String的字符混合到颜色值中:

public void MixStringIntoImage(String s, Bitmap img)
{
    int i, x, y;
    i = 0;
    x = 0;
    y = 0;
    while(i<s.Length)
    {
        Color pixelColor = img.GetPixel(x, y);
        pixelColor = Color.FromArgb(pixelColor.R, pixelColor.G, (int)s[i]); //Here you mix the blue component of the color with the character value
        img.SetPixel(x, y, pixelColor);
        i++;
        x++;
        if(x == img.Width)
        { 
            x = 0;
            y++;
            if(y == img.Height) throw new Exception("String is too long for this image!!!");
        }
    }
}

从图像中获取加密字符串:

public String GetStringFromMixedImage(int stringLength, Bitmap img)
{
    String s = "";
    int i, x, y;
    i = 0;
    x = 0;
    y = 0;
    while(i<stringLength)
    {
        s = s + (char)(img.GetPixel(x,y).B); //Get the blue component from the pixel color and then cast to char
        i++;
        x++;
        if(x == img.Width)
        { 
            x = 0;
            y++;
            if(y == img.Height) throw new Exception("String is too long for this image!!!");
        }
    }
    return s;
}