我有加密和解密文本的程序
点击加密后,加密文本将是随机字母
我可以用阿拉伯语而不是随机的英文字母制作生成的密文吗?
如何更改密文的语言
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Security.Cryptography;
namespace Encrypter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string key, EnValue;
private void Form1_Load(object sender, EventArgs e)
{
txtKey.Text = "";
}
private void btnEncrypt_Click(object sender, EventArgs e)
{
key = Convert.ToString(txtKey.Text);
EnValue = Convert.ToString(txtToEncript.Text);
if (key != "" && EnValue!="" )
{
txtResult.Text=EncryptStringAES(EnValue, key);
}
else
{
lblResult.Text = "Enter text to Encrypt";
return;
}
}
private void btnDecript_Click(object sender, EventArgs e)
{
EnValue = Convert.ToString(txtResult.Text);
key = Convert.ToString(txtKey.Text);
if (key != "" && EnValue != "")
{
txtToEncript.Text = DecryptStringAES(EnValue,key);
}
else
{
lblResult.Text = "Enter text to Decrypt";
return;
}
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private static byte[] _salt = Encoding.ASCII.GetBytes("o6806642kbM7c5");
public static string EncryptStringAES(string plainText, string sharedSecret)
{
if (string.IsNullOrEmpty(plainText))
throw new ArgumentNullException("plainText");
if (string.IsNullOrEmpty(sharedSecret))
throw new ArgumentNullException("sharedSecret");
string outStr = null; // Encrypted string to return
RijndaelManaged aesAlg = null; // RijndaelManaged object used to encrypt the data.
try
{
// generate the key from the shared secret and the salt
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);
// Create a RijndaelManaged object
aesAlg = new RijndaelManaged();
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
// prepend the IV
msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int));
msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length);
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
}
outStr = Convert.ToBase64String(msEncrypt.ToArray());
}
}
catch (Exception ex)
{
Label l1 = new Label();
l1.ForeColor = Color.Red;
l1.Text = "Enter Proper Key value.";
l1.Show();
Form1 f = new Form1();
f.Controls.Add(l1);
}
finally
{
// Clear the RijndaelManaged object.
if (aesAlg != null)
aesAlg.Clear();
}
// Return the encrypted bytes from the memory stream.
return outStr;
}
public static string DecryptStringAES(string cipherText, string sharedSecret)
{
if (string.IsNullOrEmpty(cipherText))
throw new ArgumentNullException("cipherText");
if (string.IsNullOrEmpty(sharedSecret))
throw new ArgumentNullException("sharedSecret");
// Declare the RijndaelManaged object
// used to decrypt the data.
RijndaelManaged aesAlg = null;
// Declare the string used to hold
// the decrypted text.
string plaintext = null;
try
{
// generate the key from the shared secret and the salt
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);
// Create the streams used for decryption.
byte[] bytes = Convert.FromBase64String(cipherText);
using (MemoryStream msDecrypt = new MemoryStream(bytes))
{
// Create a RijndaelManaged object
// with the specified key and IV.
aesAlg = new RijndaelManaged();
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
// Get the initialization vector from the encrypted stream
aesAlg.IV = ReadByteArray(msDecrypt);
// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
}
}
}
catch (Exception ex)
{
Label l = new Label();
l.ForeColor = Color.Red;
l.Text="Enter Proper Key value.";
l.Show();
Form1 f = new Form1();
f.Controls.Add(l);
}
finally
{
// Clear the RijndaelManaged object.
if (aesAlg != null)
aesAlg.Clear();
}
return plaintext;
}
private static byte[] ReadByteArray(Stream s)
{
byte[] rawLength = new byte[sizeof(int)];
if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length)
{
throw new SystemException("Stream did not contain properly formatted byte array");
}
byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)];
if (s.Read(buffer, 0, buffer.Length) != buffer.Length)
{
throw new SystemException("Did not read byte array properly");
}
return buffer;
}
private void btnCpyEncrt_Click(object sender, EventArgs e)
{
Clipboard.SetText(txtResult.Text);
}
}
}
答案 0 :(得分:1)
您正在使用ToBase64String
,它将二进制结果映射到包含A-Z,a-z,0-9,+,/和=字符的较长字符串。您需要实现从这些到阿拉伯字符的映射,因为没有标准可以做到这一点。