3

私は今日暗号化を行っていましたが、同僚はそれを行うためのより簡単な/カスタムの方法を教えてくれました.私がしたことはそこにリストされています. 彼は、これはある種のハッシュと暗号化の混合物であると私に言いました。ばかげた質問で申し訳ありませんが、私はここに新しいです。:)以下のメソッドは文字列(私の場合はパスワード)を取ります。それを逆にして辞書を作成し(辞書項目の追加は以下にリストされています)、キーと値を照合し、暗号化されたデータを返します。

public static string Encrypt(string source)
{
    string enCrypted = "";
    try
    {
        source = Reverse(source);
        Dictionary<char, char> sourceTable = AddDictionaryItems();

        char[] sourceArray = source.ToCharArray();
        StringBuilder encryptedData = new StringBuilder();
        foreach (char chr in sourceArray)
        {
            KeyValuePair<char, char> Pair;
            Pair = sourceTable.First(tuple => tuple.Key == chr);
            encryptedData.Append(Pair.Value);
        }
        enCrypted=encryptedData.ToString();
    }
    catch (Exception ex)
    { 

    }
    return enCrypted;
}

以下のメソッドはアイテムをディクショナリに追加します。アイテムは基本的にASCIIコードに基づいています。私はすべての asciis をループし、対応する文字が辞書に追加されます。しかし、本当のトリックは、辞書に項目を追加するときです。たとえば、辞書に「A」をキーとして追加すると、その値は「D」になります。変数「jump」は、キーと値の違いを指定します。したがって、パスワードが「ABC」の場合、逆にすると「DEF」または「FED」が返されます。

public static Dictionary<char, char> AddDictionaryItems()
{
    Dictionary<char, char> dc = new Dictionary<char, char>();
    try
    {
        int initial = 33;
        int jump = 3;
        int final = 127 - jump;

        for (int ascii = initial; ascii < final; ascii++)
        {
            dc.Add((char)ascii, (char)(ascii + jump));
        }
        for (int ascii = final; ascii < final + jump; ascii++)
        {
            dc.Add((char)ascii, (char)(initial));
            initial++;
        }
    }
    catch (Exception ex)
    { 
        throw ex;
    }
    return dc;
}
4

2 に答える 2

7

これはSubstitution Cipherになりますが、楽しみのためにこれを作成する場合を除き、セキュリティが必要な目的でこのメソッドを使用しないでください。何千人もの人々が毎日、この暗号化方法を楽しみのためにクラックしています (地元の新聞をチェックしてください。新聞にも載っている可能性があります。通常はクロスワードの横にあります)。

于 2013-01-23T04:59:42.220 に答える
0

みんな私は自分のコードを調整しました

public static string Reverse(string str)
    {
        char[] charArray = str.ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }

    public static string Encrypt(string source)
    {
        string prefix = Guid.NewGuid().ToString();
        string infix = Guid.NewGuid().ToString();
        string postfix = Guid.NewGuid().ToString();

        int length = source.Length;
        string firstHalf = source.Substring(0, length / 2);
        string secondHalf = source.Substring(length / 2);

        string ConcatedPassword = prefix + firstHalf + infix + secondHalf + postfix;

        string enCrypted = "";
        try
        {
            ConcatedPassword = Reverse(ConcatedPassword);
            Dictionary<char, char> sourceTable = AddDictionaryItems();

            char[] sourceArray = ConcatedPassword.ToCharArray();
            StringBuilder encryptedData = new StringBuilder();
            foreach (char chr in sourceArray)
            {
                KeyValuePair<char, char> Pair;
                Pair = sourceTable.First(tuple => tuple.Key == chr);
                encryptedData.Append(Pair.Value);
            }
            enCrypted = encryptedData.ToString();
        }
        catch (Exception ex)
        {

        }
        return enCrypted;
    }

    public static string Decrypt(string source)
    {
        string deCrypted = "";
        try
        {
            source = Reverse(source);
            Dictionary<char, char> sourceTable = AddDictionaryItems();

            char[] sourceArray = source.ToCharArray();
            StringBuilder decryptedData = new StringBuilder();
            foreach (char chr in sourceArray)
            {
                KeyValuePair<char, char> Pair;
                Pair = sourceTable.First(tuple => tuple.Value == chr);
                decryptedData.Append(Pair.Key);
            }
            deCrypted = decryptedData.ToString();
            string prefixRemoved = deCrypted.Remove(0, 36);
            string postfixRemoved = prefixRemoved.Remove(prefixRemoved.Length - 36);
            string infixRemoved = postfixRemoved.Remove((postfixRemoved.Length - 36) / 2, 36);
            deCrypted = infixRemoved;
        }
        catch (Exception ex)
        {

        }
        return deCrypted;
    }

    public static Dictionary<char, char> AddDictionaryItems()
    {
        Dictionary<char, char> dc = new Dictionary<char, char>();
        try
        {
            int initial = 33;
            int jump = 10;
            int final = 127 - jump;

            for (int ascii = initial; ascii < final; ascii++)
            {
                dc.Add((char)ascii, (char)(ascii + jump));
            }
            for (int ascii = final; ascii < final + jump; ascii++)
            {
                dc.Add((char)ascii, (char)(initial));
                initial++;
            }
        }
        catch (Exception ex)
        {

        }
        return dc;
    }

protected void Page_Load(object sender, EventArgs e)
{
     string password = "$Om3P@55w0r6";
     string encrypted = Encrypt(password);
     string decrypted = Decrypt(encrypted);
}

暗号化は安全ではありませんが、その始まりです。誰かが独自のメソッドをゼロから作成するのに役立つことを願っています。

于 2013-01-23T10:00:41.170 に答える