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