0
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() 方法中。

4

2 回答 2

0

状态的文档Color.FromArgb( int alpha, int red, int green, int blue)

尽管此方法允许为每个组件传递一个 32 位的值,但每个组件的值被限制为 8 位。

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

检查您的代码,调试并在调用处设置断点Color.FromArgb并注意此限制。

于 2017-03-30T09:48:14.493 回答
0

编辑:

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

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

然后,

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

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;
}
于 2017-03-30T10:08:45.670 回答