📄 form1.cs
字号:
this.btnSaveBitmap.Location = new System.Drawing.Point(280, 328);
this.btnSaveBitmap.Name = "btnSaveBitmap";
this.btnSaveBitmap.Size = new System.Drawing.Size(160, 23);
this.btnSaveBitmap.TabIndex = 3;
this.btnSaveBitmap.Text = "Save Result";
this.btnSaveBitmap.Click += new System.EventHandler(this.btnSaveBitmap_Click);
//
// chkGrayscale
//
this.chkGrayscale.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.chkGrayscale.Checked = true;
this.chkGrayscale.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkGrayscale.Location = new System.Drawing.Point(16, 296);
this.chkGrayscale.Name = "chkGrayscale";
this.chkGrayscale.Size = new System.Drawing.Size(176, 24);
this.chkGrayscale.TabIndex = 1;
this.chkGrayscale.Text = "Produce grayscale noise";
//
// tabPage2
//
this.tabPage2.Controls.AddRange(new System.Windows.Forms.Control[] {
this.groupBox3,
this.btnExtract});
this.tabPage2.Location = new System.Drawing.Point(4, 25);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Size = new System.Drawing.Size(456, 363);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "Extract";
//
// groupBox3
//
this.groupBox3.Controls.AddRange(new System.Windows.Forms.Control[] {
this.label1,
this.txtExtractedMsgFile,
this.txtExtractedMsgText,
this.btnExtractedMsgFile,
this.label3});
this.groupBox3.Location = new System.Drawing.Point(16, 16);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(424, 296);
this.groupBox3.TabIndex = 0;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Nachricht";
//
// label1
//
this.label1.Location = new System.Drawing.Point(16, 32);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(376, 16);
this.label1.TabIndex = 10;
this.label1.Text = "Save Extracted Message to File";
//
// txtExtractedMsgFile
//
this.txtExtractedMsgFile.Location = new System.Drawing.Point(16, 48);
this.txtExtractedMsgFile.Name = "txtExtractedMsgFile";
this.txtExtractedMsgFile.Size = new System.Drawing.Size(312, 22);
this.txtExtractedMsgFile.TabIndex = 0;
this.txtExtractedMsgFile.Text = "";
//
// txtExtractedMsgText
//
this.txtExtractedMsgText.Location = new System.Drawing.Point(16, 112);
this.txtExtractedMsgText.Multiline = true;
this.txtExtractedMsgText.Name = "txtExtractedMsgText";
this.txtExtractedMsgText.ReadOnly = true;
this.txtExtractedMsgText.Size = new System.Drawing.Size(392, 176);
this.txtExtractedMsgText.TabIndex = 5;
this.txtExtractedMsgText.Text = "";
//
// btnExtractedMsgFile
//
this.btnExtractedMsgFile.Location = new System.Drawing.Point(328, 48);
this.btnExtractedMsgFile.Name = "btnExtractedMsgFile";
this.btnExtractedMsgFile.Size = new System.Drawing.Size(80, 23);
this.btnExtractedMsgFile.TabIndex = 1;
this.btnExtractedMsgFile.Text = "Browse...";
this.btnExtractedMsgFile.Click += new System.EventHandler(this.btnExtractedMsgFile_Click);
//
// label3
//
this.label3.Location = new System.Drawing.Point(16, 96);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(376, 16);
this.label3.TabIndex = 10;
this.label3.Text = "Extracted UnicodeText";
//
// frmMain
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
this.ClientSize = new System.Drawing.Size(984, 431);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.tabControl1,
this.grpPicture,
this.grpKey});
this.Name = "frmMain";
this.Text = "Use this on your own risk - for help and bug reports contact picturekey@binary-un" +
"iverse.net";
this.grpPicture.ResumeLayout(false);
this.grpKey.ResumeLayout(false);
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.grpMessage.ResumeLayout(false);
this.tabPage2.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Der Haupteinstiegspunkt f黵 die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new frmMain());
}
private void btnHide_Click(object sender, System.EventArgs e) {
Bitmap bitmap = (Bitmap)picImage.Image;
//get a stream for the message to hide
Stream messageStream = GetMessageStream();
if(messageStream.Length == 0){
MessageBox.Show("Please enter a message or select a file.");
txtMessageText.Focus();
}else{
//get a stream fot the key
Stream keyStream = GetKeyStream();
if(keyStream.Length == 0){
MessageBox.Show("Please enter a password or select a key file.");
txtKeyText.Focus();
}else{
try{
//hide the message
CryptUtility.HideMessageInBitmap(messageStream, bitmap, keyStream, chkGrayscale.Checked);
//display result
picImage.Image = bitmap;
btnSaveBitmap.Enabled = true;
}catch(Exception ex){
MessageBox.Show("Exception:\r\n"+ex.Message);
}
}
keyStream.Close();
}
messageStream.Close();
bitmap = null;
}
private void btnExtract_Click(object sender, System.EventArgs e) {
Bitmap bitmap = (Bitmap)picImage.Image;
//empty stream for the extracted message
Stream messageStream = new MemoryStream();
//get a stream for the key
Stream keyStream = GetKeyStream();
if(keyStream.Length == 0){
MessageBox.Show("Please enter a password or select a key file.");
txtKeyText.Focus();
}else{
try{
//extract the hidden message from the bitmap
CryptUtility.ExtractMessageFromBitmap(bitmap, keyStream, ref messageStream);
//save the message, if a filename is available
if(txtExtractedMsgFile.Text.Length > 0){
messageStream.Seek(0, SeekOrigin.Begin);
FileStream fs = new FileStream(txtExtractedMsgFile.Text, FileMode.Create);
byte[] streamContent = new Byte[messageStream.Length];
messageStream.Read(streamContent, 0, streamContent.Length);
fs.Write(streamContent, 0, streamContent.Length);
}
//display the message - displays chaos, if it's no unicode text
messageStream.Seek(0, SeekOrigin.Begin);
StreamReader reader = new StreamReader(messageStream, UnicodeEncoding.Unicode);
String readerContent = reader.ReadToEnd();
if(readerContent.Length > txtExtractedMsgText.MaxLength){
readerContent = readerContent.Substring(0, txtExtractedMsgText.MaxLength);
}
txtExtractedMsgText.Text = readerContent;
}catch(Exception ex){
MessageBox.Show("Exception:\r\n"+ex.Message);
}
}
//close the streams
messageStream.Close();
keyStream.Close();
bitmap = null;
}
/// <summary>Creates a stream to read the message from a string or a file</summary>
/// <returns>FileStream for a message file, or MemoryStream</returns>
private Stream GetMessageStream(){
Stream messageStream;
if(rdoMessageText.Checked){
byte[] messageBytes = UnicodeEncoding.Unicode.GetBytes(txtMessageText.Text);
messageStream = new MemoryStream(messageBytes);
}else{
messageStream = new FileStream(txtMessageFile.Text, FileMode.Open, FileAccess.Read);
}
return messageStream;
}
/// <summary>Creates a stream to read the key from a string or a file</summary>
/// <returns>FileStream for a key file, or MemoryStream for a password</returns>
private Stream GetKeyStream(){
Stream keyStream;
if(rdoKeyText.Checked){
byte[] keyBytes = UnicodeEncoding.Unicode.GetBytes(txtKeyText.Text);
keyStream = new MemoryStream(keyBytes);
}else{
keyStream = new FileStream(txtKeyFile.Text, FileMode.Open, FileAccess.Read);
}
return keyStream;
}
/// <summary>Opens a bitmap</summary>
/// <param name="fileName">Path and name of the bitmap file</param>
private void SetImage(String fileName){
picImage.Image = new Bitmap(fileName);
btnHide.Enabled = btnExtract.Enabled = true;
btnSaveBitmap.Enabled = false;
int index = fileName.LastIndexOf("\\")+1;
if(index > 0){ fileName = fileName.Substring(index); }
grpPicture.Text = "Carrier Bitmap ("+fileName+")";
}
/// <summary>Displays the OpenFile dialog</summary>
/// <returns>The selected file name, or null</returns>
private String GetFileName(String filter){
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = false;
if(filter.Length > 0){ dlg.Filter = filter; }
if( dlg.ShowDialog(this) != DialogResult.Cancel){
return dlg.FileName;
}else{
return null;
}
}
private void rdoMessage_Click(object sender, System.EventArgs e) {
txtMessageFile.Enabled = rdoMessageFile.Checked;
txtMessageText.Enabled = rdoMessageText.Checked;
}
private void rdoKey_Click(object sender, System.EventArgs e) {
txtKeyFile.Enabled = rdoKeyFile.Checked;
txtKeyText.Enabled = rdoKeyText.Checked;
}
private void btnImageFile_Click(object sender, System.EventArgs e) {
String fileName = GetFileName("Bitmaps (*.bmp)|*.bmp|Tagged Image File Format(*.tif)|*.tif|PNG-24(*.png)|*.png");
if(fileName != null){
txtImageFile.Text = fileName;
SetImage(fileName);
}
}
private void btnSaveBitmap_Click(object sender, System.EventArgs e) {
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Bitmaps (*.bmp)|*.bmp|Tagged Image File Format(*.tif)|*.tif|PNG-24(*.png)|*.png";
if( dlg.ShowDialog() == DialogResult.OK ){
System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Bmp;
if(dlg.FilterIndex == 2){
format = System.Drawing.Imaging.ImageFormat.Tiff;
}else if(dlg.FilterIndex == 3){
format = System.Drawing.Imaging.ImageFormat.Png;
}
//copy the bitmap
Image img = new Bitmap(picImage.Image);
//close bitmap file
this.SuspendLayout();
picImage.Image.Dispose();
picImage.Image = null;
btnSaveBitmap.Enabled = btnHide.Enabled = btnExtract.Enabled = false;
txtImageFile.Text = String.Empty;
this.ResumeLayout();
//save new bitmap
img.Save(dlg.FileName, format);
}
}
private void txtMessageFile_Enter(object sender, System.EventArgs e) {
rdoKeyFile.Checked = true;
}
private void txtMessageText_Enter(object sender, System.EventArgs e) {
rdoKeyText.Checked = true;
}
private void txtImageFile_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
if(e.KeyCode == Keys.Enter){
SetImage(txtImageFile.Text);
}
}
private void btnMessage_Click(object sender, System.EventArgs e) {
String fileName = GetFileName(String.Empty);
if(fileName != null){
txtMessageFile.Text = fileName;
rdoMessageFile.Checked = true;
}
}
private void btnExtractedMsgFile_Click(object sender, System.EventArgs e) {
SaveFileDialog dlg = new SaveFileDialog();
if( dlg.ShowDialog() == DialogResult.OK ){
txtExtractedMsgFile.Text = dlg.FileName;
}
}
private void btnKeyFile_Click(object sender, System.EventArgs e) {
String fileName = GetFileName(String.Empty);
if(fileName != null){
txtKeyFile.Text = fileName;
rdoKeyFile.Checked = true;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -