XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
UTF-8
using System;

namespace XFEExtension.XEAEncryption
{
    /// <summary>
    /// XEA加密算法
    /// </summary>
    public static class XEAEncryption
    {
        /// <summary>
        /// 进行XEA加密
        /// </summary>
        /// <param name="waitEncryptString">待加密文本</param>
        /// <param name="secretKey">加密秘钥</param>
        /// <returns>加密文本</returns>
        public static string XEAEncrypt(string waitEncryptString, string secretKey)
        {
            string randomSeed = StringExtension.StringExtension.GenerateRandomString(5);
            string encryptedRandomSeed = string.Empty;
            string encrypted = string.Empty;
            string middleKey = string.Empty;
            char middleChar = ' ';
            for (int i = 0; i < secretKey.Length / 2; i++)
            {
                middleChar ^= secretKey[i];
                middleKey += (char)(secretKey[i] ^ secretKey[secretKey.Length - i - 1]);
            }//计算中间密钥,防止出现秘钥长度大于待加密文本长度的情况
            for (int i = 0; i < randomSeed.Length; i++)
            {
                char currentChar = randomSeed[i];
                int secretKeyIndex = i % secretKey.Length;
                int middleKeyIndex = i % middleKey.Length;
                char secretKeyChar = secretKey[secretKeyIndex];
                char middleKeyChar = middleKey[middleKeyIndex];
                char encryptedChar = (char)(currentChar ^ secretKeyChar ^ middleKeyChar ^ middleChar);
                encryptedRandomSeed += encryptedChar;
            }//对随机种子进行加密
            for (int i = 0; i < waitEncryptString.Length; i++)
            {
                char currentChar = waitEncryptString[i];
                int secretKeyIndex = i % secretKey.Length;
                int middleKeyIndex = i % middleKey.Length;
                int randomSeedIndex = i % randomSeed.Length;
                char secretKeyChar = secretKey[secretKeyIndex];
                char middleKeyChar = middleKey[middleKeyIndex];
                char randomSeedChar = randomSeed[randomSeedIndex];
                char encryptedChar = (char)(currentChar ^ secretKeyChar ^ middleKeyChar ^ randomSeedChar ^ middleChar);
                encrypted += encryptedChar;
            }//XOR加密

            return encryptedRandomSeed + encrypted;
        }
        /// <summary>
        /// 进行XEA解密
        /// </summary>
        /// <param name="encryptedString">加密文本</param>
        /// <param name="secretKey">解密秘钥</param>
        /// <returns>解密文本</returns>
        public static string XEADecrypt(string encryptedString, string secretKey)
        {
            string decrypted = string.Empty;
            string randomSeed = encryptedString.Substring(0, 5);
            string decryptedRandomSeed = string.Empty;
            string encrypted = encryptedString.Substring(5);
            string middleKey = string.Empty;
            char middleChar = ' ';
            for (int i = 0; i < secretKey.Length / 2; i++)
            {
                middleChar ^= secretKey[i];
                middleKey += (char)(secretKey[i] ^ secretKey[secretKey.Length - i - 1]);
            }//计算中间密钥
            for (int i = 0; i < randomSeed.Length; i++)
            {
                char currentChar = randomSeed[i];
                int secretKeyIndex = i % secretKey.Length;
                int middleKeyIndex = i % middleKey.Length;
                char secretKeyChar = secretKey[secretKeyIndex];
                char middleKeyChar = middleKey[middleKeyIndex];
                char encryptedChar = (char)(currentChar ^ secretKeyChar ^ middleKeyChar ^ middleChar);
                decryptedRandomSeed += encryptedChar;
            }//对随机种子进行解密
            for (int i = 0; i < encrypted.Length; i++)
            {
                char currentChar = encrypted[i];
                int secretKeyIndex = i % secretKey.Length;
                int middleKeyIndex = i % middleKey.Length;
                int randomSeedIndex = i % decryptedRandomSeed.Length;
                char secretKeyChar = secretKey[secretKeyIndex];
                char middleKeyChar = middleKey[middleKeyIndex];
                char randomSeedChar = decryptedRandomSeed[randomSeedIndex];
                char decryptedChar = (char)(currentChar ^ secretKeyChar ^ middleKeyChar ^ randomSeedChar ^ middleChar);
                decrypted += decryptedChar;
            }//XOR解密
            return decrypted;
        }
    }
    /// <summary>
    /// XEA加密算法的拓展
    /// </summary>
    public static class XEAEncryptionExtension
    {
        /// <summary>
        /// 进行XEA加密
        /// </summary>
        /// <param name="waitEncryptString">待加密文本</param>
        /// <param name="secretKey">加密秘钥</param>
        /// <returns>加密文本</returns>
        public static string XEAEncrypt(this string waitEncryptString, string secretKey)
        {
            return XEAEncryption.XEAEncrypt(waitEncryptString, secretKey);
        }
        /// <summary>
        /// 进行XEA解密
        /// </summary>
        /// <param name="encryptedString">加密文本</param>
        /// <param name="key">解密秘钥</param>
        /// <returns>解密文本</returns>
        public static string XEADecrypt(this string encryptedString, string key)
        {
            return XEAEncryption.XEADecrypt(encryptedString, key);
        }
    }
}