我在为学校制作加密程序时遇到问题。例外的是,使加密程序能够将诸如“.txt”文件之类的纯文本加密到个人密码。就我而言,这是我的生日“0811200” 因此,举个例子,你的句子以“a”开头,加密的字符应该是“a”,因为我个人密码中的第一个零表示字母表中的零步,8表示alfabet中的8个步骤,依此类推。
我已经进行了加密,但这只能用于文本的前8个字符,所以我的问题是。我可以循环整个代码,以便我可以解密我的文本吗?在下面的图片中,您可以看到我的意思!
以下是我已经拥有的代码:
private void button2_Click(object sender, EventArgs e)
{
button3.Enabled = true;
{
foreach (char a in textBox1.Text.Substring(0, 1))
foreach (char b in textBox1.Text.Substring(1, 1))
foreach (char c in textBox1.Text.Substring(2, 1))
foreach (char d in textBox1.Text.Substring(3, 1))
foreach (char z in textBox1.Text.Substring(4, 1))
foreach (char f in textBox1.Text.Substring(5, 1))
foreach (char g in textBox1.Text.Substring(6, 1))
foreach (char h in textBox1.Text.Substring(7, 1))
{
char encrypted1 = (char)(a + 0);
textBox2.Text += encrypted1.ToString();
char encrypted2 = (char)(b + 8);
textBox2.Text += encrypted2.ToString();
char encrypted3 = (char)(c + 1);
textBox2.Text += encrypted3.ToString();
char encrypted4 = (char)(d + 1);
textBox2.Text += encrypted4.ToString();
char encrypted5 = (char)(z + 2);
textBox2.Text += encrypted5.ToString();
char encrypted6 = (char)(f + 0);
textBox2.Text += encrypted6.ToString();
char encrypted7 = (char)(g + 0);
textBox2.Text += encrypted7.ToString();
char encrypted8 = (char)(h + 0);
textBox2.Text += encrypted8.ToString();
}
}
}
private void button3_Click(object sender, EventArgs e)
{
foreach (char a in textBox2.Text.Substring(0, 1))
foreach (char b in textBox2.Text.Substring(1, 1))
foreach (char c in textBox2.Text.Substring(2, 1))
foreach (char d in textBox2.Text.Substring(3, 1))
foreach (char z in textBox2.Text.Substring(4, 1))
foreach (char f in textBox2.Text.Substring(5, 1))
foreach (char g in textBox2.Text.Substring(6, 1))
foreach (char h in textBox2.Text.Substring(7, 1))
{
char encrypted1 = (char)(a - 0);
textBox3.Text += encrypted1.ToString();
char encrypted2 = (char)(b - 8);
textBox3.Text += encrypted2.ToString();
char encrypted3 = (char)(c - 1);
textBox3.Text += encrypted3.ToString();
char encrypted4 = (char)(d - 1);
textBox3.Text += encrypted4.ToString();
char encrypted5 = (char)(z - 2);
textBox3.Text += encrypted5.ToString();
char encrypted6 = (char)(f - 0);
textBox3.Text += encrypted6.ToString();
char encrypted7 = (char)(g - 0);
textBox3.Text += encrypted7.ToString();
char encrypted8 = (char)(h - 0);
textBox3.Text += encrypted8.ToString();
}
}
答案 0 :(得分:1)
摆脱所有那些奇怪的循环。您想循环输入文本,然后根据它的位置更改字符:
//Encoding:
string passwd = "08112000";
int pos = 0;
string result = string.Empty;
foreach(char c in textBox1.Text)
{
result += ((char)(c - passwd[pos % passwd.Length])).ToString();
pos++;
}
textBox2.Text = result;
通过模数(%
),您始终从0
迭代到passwd.Lenght - 1
以采取正确的#34;加密"信。
(一般来说,最好使用StringBuilder
或连接而不是result +=
,但在这种情况下,它是微观优化。
您可以使用LINQ缩短此代码:
string passwd = "08112000";
textBox2.Text = new String(textBox1.Text.Select((c, index) => (char)(c - passwd[index % passwd.Length])).ToArray());
答案 1 :(得分:0)
那些循环很奇怪。我想你只想要
textBox3.Test = "";
foreach(char c in textBox1.Text)
{
char encrypted1 = (char)(c - 0);
textBox3.Text += encrypted1.ToString();
}
单独的问题是这是否是正确的“加密”机制,但至少代码是可读的。它将处理任何长度
答案 2 :(得分:0)
您可以使用一些var $clipboard = $('#clipboard');
$clipboard.on('click',function(e){
var img = document.createElement('img');
img.src = canvas.toDataURL('image/jpeg', 0.1);
var div1 = document.createElement('div');
div1.contentEditable = true;
div1.appendChild(img);
document.body.appendChild(div1);
SelectText(div1);
try {
var successful = document.execCommand('copy');
var msg = successful ? 'successful' : 'unsuccessful';
console.log('Copying text command was ' + msg);
} catch (err) {
console.log('Oops, unable to copy');
}
document.body.removeChild(div1);
});
function SelectText(element) {
var doc = document;
if (doc.body.createTextRange) {
var range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
}
代码执行此操作:
linq