Unity中使用维吉尼亚算法加密算法

维吉尼亚算法介绍:

在这里插入图片描述

维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
维吉尼亚密码曾多次被发明。
该方法最早记录在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso)于1553年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso)中。然而,后来在19世纪时被误传为是法国外交官布莱斯·德·维吉尼亚(Blaise De Vigenère)所创造,因此现在被称为“维吉尼亚密码”。
维吉尼亚密码以其简单易用而著称,同时初学者通常难以破解,因而又被称为“不可破译的密码”(法语:le chiffre indéchiffrable)。

主脚本:

可以将下面脚本挂载到一个空的GameObject上,然后通过调用Encrypt和Decrypt方法来进行加密和解密操作。

using UnityEngine;

public class VigenereCipher : MonoBehaviour
{
    
    
    private string key = "SECRET"; // 密钥

    // 加密方法
    public string Encrypt(string plaintext)
    {
    
    
        string encryptedText = "";
        int keyIndex = 0;

        for (int i = 0; i < plaintext.Length; i++)
        {
    
    
            char currentChar = plaintext[i];
            int shift = key[keyIndex] - 'A'; // 将密钥转换为0-25的数字

            if (char.IsLetter(currentChar))
            {
    
    
                if (char.IsUpper(currentChar))
                    encryptedText += (char)((currentChar - 'A' + shift) % 26 + 'A');
                else
                    encryptedText += (char)((currentChar - 'a' + shift) % 26 + 'a');

                keyIndex = (keyIndex + 1) % key.Length;
            }
            else
            {
    
    
                encryptedText += currentChar; // 非字母字符保持不变
            }
        }

        return encryptedText;
    }

    // 解密方法
    public string Decrypt(string encryptedText)
    {
    
    
        string decryptedText = "";
        int keyIndex = 0;

        for (int i = 0; i < encryptedText.Length; i++)
        {
    
    
            char currentChar = encryptedText[i];
            int shift = key[keyIndex] - 'A';

            if (char.IsLetter(currentChar))
            {
    
    
                if (char.IsUpper(currentChar))
                    decryptedText += (char)((currentChar - 'A' - shift + 26) % 26 + 'A');
                else
                    decryptedText += (char)((currentChar - 'a' - shift + 26) % 26 + 'a');

                keyIndex = (keyIndex + 1) % key.Length;
            }
            else
            {
    
    
                decryptedText += currentChar;
            }
        }
        return decryptedText;
    }
}

密钥生成脚本:

using UnityEngine;
using System;
using System.Text;

public class KeyGenerator : MonoBehaviour
{
    
    
    private const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    // 生成随机密钥
    public string GenerateRandomKey(int length)
    {
    
    
        StringBuilder keyBuilder = new StringBuilder();

        for (int i = 0; i < length; i++)
        {
    
    
            char randomChar = alphabet[UnityEngine.Random.Range(0, alphabet.Length)];
            keyBuilder.Append(randomChar);
        }

        return keyBuilder.ToString();
    }
}

生成随机密钥

上面的脚本可以挂载到另一个空的GameObject上。然后,你可以调用GenerateRandomKey方法来生成指定长度的随机密钥。例如:

KeyGenerator keyGenerator = GetComponent<KeyGenerator>();
string randomKey = keyGenerator.GenerateRandomKey(10); // 生成长度为10的随机密钥
Debug.Log("Random Key: " + randomKey);

同时请注意,密钥的生成应该是随机的并且足够复杂,以增加密码的安全性。在实际应用中,你可能会使用更加严格和复杂的方法来生成密钥,以确保安全性。同时,密钥的管理也是非常重要的一部分,需要妥善保管和分发。

猜你喜欢

转载自blog.csdn.net/weixin_45375968/article/details/132585494
今日推荐