Search code examples
c#winformsencryptioncoordinate-systemscoordinate

Translate text to numbers with coordinates


I thought of making something for fun today and decided to make a simple program that'll translate a peace of text into numbers. I tried this code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AlphaNumCrypt
{
public partial class Form1 : Form
{
    public String input;
    public String output;
    public Form1()
    {
        InitializeComponent();
    }

    private void translateButton_Click(object sender, EventArgs e)
    {
        // Encrypt/Decrypt input
        if (toText.Checked == true)
        {
            // Decrypt input
            input = "";
            input = inputTextBox.Text.ToString();
            decrypt();
        }
        else if (toAlphaNum.Checked == true)
        {
            // Encrypt input
            input = "";
            input = inputTextBox.Text.ToString();
            encrypt();
        }
    }

    private void encrypt()
    {
        // Encrypt the plain text input
        output = input;
        output.Replace("a", "11");
        output.Replace("b", "12");
        output.Replace("c", "13");
        output.Replace("d", "14");
        output.Replace("e", "15");
        output.Replace("f", "16");
        output.Replace("g", "17");
        output.Replace("h", "18");
        output.Replace("i", "19");
        output.Replace("j", "21");
        output.Replace("k", "22");
        output.Replace("l", "23");
        output.Replace("m", "24");
        output.Replace("n", "25");
        output.Replace("o", "26");
        output.Replace("p", "27");
        output.Replace("q", "28");
        output.Replace("r", "29");
        output.Replace("s", "31");
        output.Replace("t", "32");
        output.Replace("u", "33");
        output.Replace("v", "34");
        output.Replace("w", "35");
        output.Replace("x", "36");
        output.Replace("y", "37");
        output.Replace("z", "38");
        output.Replace("æ", "39");
        output.Replace("ø", "41");
        output.Replace("å", "42");
        outputTextBox.Text = output;
    }

    private void decrypt()
    {
        // Decrypt the AlphaNum input
        output = input;
        output.Replace("11", "a");
        output.Replace("12", "b");
        output.Replace("13", "c");
        output.Replace("14", "d");
        output.Replace("15", "e");
        output.Replace("16", "f");
        output.Replace("17", "g");
        output.Replace("18", "h");
        output.Replace("19", "i");
        output.Replace("21", "j");
        output.Replace("22", "k");
        output.Replace("23", "l");
        output.Replace("24", "m");
        output.Replace("25", "n");
        output.Replace("26", "o");
        output.Replace("27", "p");
        output.Replace("28", "q");
        output.Replace("29", "r");
        output.Replace("31", "s");
        output.Replace("32", "t");
        output.Replace("33", "u");
        output.Replace("34", "v");
        output.Replace("35", "w");
        output.Replace("36", "x");
        output.Replace("37", "y");
        output.Replace("38", "z");
        output.Replace("39", "æ");
        output.Replace("41", "ø");
        output.Replace("42", "å");
        outputTextBox.Text = output;
    }
}
}

But for some reason the output is equal to the input, what am I doing wrong here?

Regards, Erik


Solution

  • It's because you don't use the result of the output.Replace method. It returns a new string and doesn't modify an existing. You should modify your code as follows:

    output = output.Replace("a", "11");
    ...
    

    UPDATE. To make a code more convenient you can store your conversion rules as the array of Tuple<string, string>. Thus you can use loops to encode and decode a text. Here is an example:

    private readonly Tuple<string, string>[] rules = new[]
        {
            new Tuple<string, string>("a", "11"),
            new Tuple<string, string>("b", "12"),
            new Tuple<string, string>("c", "13"),
            ...
        };
    
    private string Encrypt(string input)
    {
        return rules.Aggregate(input, (current, rule) => current.Replace(rule.Item1, rule.Item2));
    }
    
    private string Decrypt(string input)
    {
        return rules.Aggregate(input, (current, rule) => current.Replace(rule.Item2, rule.Item1));
    }