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()方法。
答案 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;
}