AddInstruction和 XorInstruction改为非线性,避免 field encryption出现 加密效果为0的情况

backup
walon 2025-05-14 11:05:32 +08:00
parent 542585b1f7
commit ca3c15c44e
3 changed files with 10 additions and 8 deletions

View File

@ -14,22 +14,22 @@ namespace Obfuz.EncryptionVM.Instructions
}
public override int Encrypt(int value, int[] secretKey, int salt)
{
return value + secretKey[_opKeyIndex] + salt + _addValue;
return (value ^ secretKey[_opKeyIndex] ^ salt) + _addValue;
}
public override int Decrypt(int value, int[] secretKey, int salt)
{
return value - secretKey[_opKeyIndex] - salt - _addValue;
return (value - _addValue) ^ secretKey[_opKeyIndex] ^ salt;
}
public override void GenerateEncryptCode(List<string> lines, string indent)
{
lines.Add(indent + $"value += _secretKey[{_opKeyIndex}] + salt + {_addValue};");
lines.Add(indent + $"value = (value ^ _secretKey[{_opKeyIndex}] ^ salt) + {_addValue};");
}
public override void GenerateDecryptCode(List<string> lines, string indent)
{
lines.Add(indent + $"value -= _secretKey[{_opKeyIndex}] + salt + {_addValue};");
lines.Add(indent + $"value = (value - {_addValue}) ^ _secretKey[{_opKeyIndex}] ^ salt;");
}
}
}

View File

@ -15,22 +15,22 @@ namespace Obfuz.EncryptionVM.Instructions
public override int Encrypt(int value, int[] secretKey, int salt)
{
return value ^ secretKey[_opKeyIndex] ^ salt ^ _xorValue;
return (value + secretKey[_opKeyIndex] + salt) ^ _xorValue;
}
public override int Decrypt(int value, int[] secretKey, int salt)
{
return value ^ secretKey[_opKeyIndex] ^ salt ^ _xorValue;
return (value ^ _xorValue) - secretKey[_opKeyIndex] - salt;
}
public override void GenerateEncryptCode(List<string> lines, string indent)
{
lines.Add(indent + $"value ^= _secretKey[{_opKeyIndex}] ^ salt ^ {_xorValue};");
lines.Add(indent + $"value = (value + _secretKey[{_opKeyIndex}] + salt) ^ {_xorValue};");
}
public override void GenerateDecryptCode(List<string> lines, string indent)
{
lines.Add(indent + $"value ^= _secretKey[{_opKeyIndex}] ^ salt ^ {_xorValue};");
lines.Add(indent + $"value = (value ^ {_xorValue}) - _secretKey[{_opKeyIndex}] - salt;");
}
}
}

View File

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Linq.Expressions;
using System.Runtime.CompilerServices;
using System.Text;
using UnityEngine;
using UnityEngine.Assertions;
using UnityEngine.UIElements;
@ -32,6 +33,7 @@ namespace Obfuz.EncryptionVM
{
int encryptedValue = _opCodes[i].Encrypt(value, _secretKey, i);
int decryptedValue = _opCodes[i].Decrypt(encryptedValue, _secretKey, i);
Debug.Log($"instruction type:{_opCodes[i].function.GetType()}");
Assert.AreEqual(value, decryptedValue);
}