mirror of
https://github.com/JDM170/model_coder
synced 2025-12-10 05:57:19 +07:00
changes
Signed-off-by: JDM170 <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
72
Program.cs
72
Program.cs
@@ -9,34 +9,22 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Reflection;
|
||||
using Tea;
|
||||
using Utils;
|
||||
|
||||
public class dllimport
|
||||
{
|
||||
Assembly asm = Assembly.LoadFrom(@".\base64.dll");
|
||||
|
||||
//public string test(string str)
|
||||
//{
|
||||
// return Base64Encode(Encoding.UTF8.GetBytes(str), 8);
|
||||
//}
|
||||
}
|
||||
namespace ModelCoder
|
||||
{
|
||||
class Program
|
||||
{
|
||||
private static IUtil util;
|
||||
private static ITeaCoding tea;
|
||||
private static dllimport dlltest;
|
||||
private static readonly uint blockSize = 12;
|
||||
private static readonly uint blockNums = 3000;
|
||||
private static readonly uint encodeSize = blockSize * blockNums;
|
||||
const int byteCount = 4;
|
||||
|
||||
private static string checkBlockBytes(byte block)
|
||||
{
|
||||
const int byteCount = 8;
|
||||
string newBlock = block.ToString();
|
||||
int size = Encoding.UTF8.GetByteCount(newBlock);
|
||||
//Console.WriteLine("newBlock: " + newBlock);
|
||||
@@ -61,7 +49,8 @@ namespace ModelCoder
|
||||
}
|
||||
#endregion
|
||||
|
||||
/*string[] test = {"22\0\0\0\0\0\0", "1\0\0\0\0\0\0\0"};
|
||||
/*
|
||||
string[] test = {"22\0\0\0\0\0\0", "1\0\0\0\0\0\0\0"};
|
||||
foreach (var i in test)
|
||||
{
|
||||
Console.WriteLine(i + " bytes: " + Encoding.UTF8.GetByteCount(i));
|
||||
@@ -72,41 +61,51 @@ namespace ModelCoder
|
||||
Console.WriteLine("first file block size: " + Encoding.UTF8.GetByteCount(blockCheck));
|
||||
blockCheck = util.Base64Encode(blockCheck);
|
||||
Console.WriteLine("first file block b64e: " + blockCheck);
|
||||
Console.WriteLine("first file block b64d: " + util.Base64Decode(blockCheck));*/
|
||||
Console.WriteLine("first file block b64d: " + util.Base64Decode(blockCheck));
|
||||
*/
|
||||
|
||||
// TEA and Base64 encoding
|
||||
var block = new uint[2];
|
||||
string result = "";
|
||||
for (uint i = 0; i < 10; i += 2)
|
||||
var block1 = new uint[2];
|
||||
string result = string.Empty;
|
||||
for (uint i = 0; i < 8; i += 2)
|
||||
{
|
||||
block[0] = Convert.ToUInt32(checkBlockBytes(file_bytes[i]));
|
||||
block[1] = Convert.ToUInt32(checkBlockBytes(file_bytes[i + 1]));
|
||||
//block1[0] = file_bytes[i];
|
||||
//block1[1] = file_bytes[i + 1];
|
||||
|
||||
Console.WriteLine("st block0: " + block[0]);
|
||||
Console.WriteLine("st block1: " + block[1]);
|
||||
block1[0] = util.ConvertStringToUInt(checkBlockBytes(file_bytes[i]));
|
||||
block1[1] = util.ConvertStringToUInt(checkBlockBytes(file_bytes[i + 1]));
|
||||
|
||||
tea.encode(block, key);
|
||||
//block1[0] = Convert.ToUInt32(checkBlockBytes(file_bytes[i]));
|
||||
//block1[1] = Convert.ToUInt32(checkBlockBytes(file_bytes[i + 1]));
|
||||
|
||||
Console.WriteLine("enc block0: " + block[0]);
|
||||
Console.WriteLine("enc block1: " + block[1]);
|
||||
Console.WriteLine();
|
||||
|
||||
Console.WriteLine("block0 bytes:");
|
||||
foreach (var j in BitConverter.GetBytes(block[0]))
|
||||
foreach (var b1 in block1)
|
||||
Console.WriteLine("st block1: " + b1);
|
||||
|
||||
tea.encode(block1, key);
|
||||
|
||||
foreach (var b1 in block1)
|
||||
Console.WriteLine("enc block1: " + b1);
|
||||
|
||||
Console.WriteLine("block1[0] bytes:");
|
||||
foreach (var j in BitConverter.GetBytes(block1[0]))
|
||||
Console.WriteLine(" " + j);
|
||||
|
||||
Console.WriteLine("block1 bytes:");
|
||||
foreach (var j in BitConverter.GetBytes(block[1]))
|
||||
Console.WriteLine("block1[1] bytes:");
|
||||
foreach (var j in BitConverter.GetBytes(block1[1]))
|
||||
Console.WriteLine(" " + j);
|
||||
|
||||
Console.WriteLine(util.Base64Encode(block[0].ToString()));
|
||||
Console.WriteLine(util.Base64Encode(block[1].ToString()));
|
||||
|
||||
//Console.WriteLine(util.Base64Encode(block1[0].ToString()));
|
||||
//Console.WriteLine(util.Base64Encode(block1[1].ToString()));
|
||||
//Console.WriteLine("b64: " + util.Base64Encode(block1[0].ToString() + block1[1].ToString()));
|
||||
|
||||
Console.WriteLine();
|
||||
|
||||
//result += util.Base64Encode(BitConverter.GetBytes(block[0])) +
|
||||
// util.Base64Encode(BitConverter.GetBytes(block[1]));
|
||||
result += util.Base64Encode(block[0].ToString()) +
|
||||
util.Base64Encode(block[1].ToString());
|
||||
result += util.Base64Encode(block1[0].ToString()) +
|
||||
util.Base64Encode(block1[1].ToString());
|
||||
}
|
||||
Console.WriteLine("Result: " + result);
|
||||
Console.WriteLine("[OUTPUT] File '" + path + "' has been TEA and Base64 encoded");
|
||||
@@ -132,8 +131,9 @@ namespace ModelCoder
|
||||
{
|
||||
util = new Util();
|
||||
tea = new TeaCoding();
|
||||
dlltest = new dllimport();
|
||||
//Console.WriteLine(dlltest.test("22"));
|
||||
|
||||
Console.WriteLine(util.Base64Decode("osz/GcOVC5s="));
|
||||
Console.WriteLine(util.Base64Decode("XsXA4M0B2X0="));
|
||||
|
||||
string fpath;
|
||||
if (args.Length > 0)
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<OpenCoverSettings />
|
||||
@@ -48,10 +48,6 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="base64">
|
||||
<HintPath>base64.dll</HintPath>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Properties />
|
||||
7
tea.cs
7
tea.cs
@@ -23,13 +23,14 @@ namespace Tea
|
||||
public void encode(uint[] v, uint[] k) {
|
||||
uint v0 = v[0], v1 = v[1];
|
||||
uint sum = 0;
|
||||
for (int i = 0; i < 32; i++) {
|
||||
unchecked {
|
||||
for (uint i = 0; i < 32; i++) {
|
||||
//for (uint i = 32; i > 0; i--) {
|
||||
unchecked {
|
||||
// unchecked {
|
||||
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
|
||||
sum += c_delta;
|
||||
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]);
|
||||
}
|
||||
}
|
||||
//sum += c_delta;
|
||||
//v0 += (v1 << 4) + k[0] ^ v1 + sum ^ (v1 >> 5) + k[1];
|
||||
//v1 += (v0 << 4) + k[2] ^ v0 + sum ^ (v0 >> 5) + k[3];
|
||||
|
||||
Binary file not shown.
Binary file not shown.
144
utils.cs
144
utils.cs
@@ -15,34 +15,15 @@ namespace Utils
|
||||
{
|
||||
public interface IUtil
|
||||
{
|
||||
uint[] ConvertKey(string input);
|
||||
uint ConvertStringToUInt(string input);
|
||||
string ConvertUIntToString(uint input);
|
||||
uint[] ConvertKey(string input);
|
||||
string Base64Encode(string plainText);
|
||||
//string Base64Encode(byte[] plainText);
|
||||
string Base64Decode(string base64EncodedData);
|
||||
}
|
||||
public partial class Util: IUtil
|
||||
{
|
||||
#region Convert Key to MD5, then to UInt
|
||||
public uint[] ConvertKey(string input)
|
||||
{
|
||||
// MD5 Hashing
|
||||
var md5 = MD5.Create();
|
||||
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
|
||||
byte[] hashBytes = md5.ComputeHash(inputBytes);
|
||||
var sb = new StringBuilder();
|
||||
for (int i = 0; i < hashBytes.Length; i++)
|
||||
sb.Append(hashBytes[i].ToString("X2"));
|
||||
// Converting to uint[]
|
||||
string key = sb.ToString().ToLower().Substring(0, 16);
|
||||
var formattedKey = new uint[4];
|
||||
int j = 0;
|
||||
for (int i = 0; i < key.Length; i += 4)
|
||||
formattedKey[j++] = ConvertStringToUInt(key.Substring(i, 4));
|
||||
return formattedKey;
|
||||
}
|
||||
#endregion
|
||||
#region Convert String to UInt and reverse
|
||||
public uint ConvertStringToUInt(string input)
|
||||
{
|
||||
@@ -63,6 +44,25 @@ namespace Utils
|
||||
return output.ToString();
|
||||
}
|
||||
#endregion
|
||||
#region Convert Key to MD5, then to UInt
|
||||
public uint[] ConvertKey(string input)
|
||||
{
|
||||
// MD5 Hashing
|
||||
var md5 = MD5.Create();
|
||||
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
|
||||
byte[] hashBytes = md5.ComputeHash(inputBytes);
|
||||
var sb = new StringBuilder();
|
||||
for (int i = 0; i < hashBytes.Length; i++)
|
||||
sb.Append(hashBytes[i].ToString("X2"));
|
||||
// Converting to uint[]
|
||||
string key = sb.ToString().ToLower().Substring(0, 16);
|
||||
var formattedKey = new uint[4];
|
||||
int j = 0;
|
||||
for (int i = 0; i < key.Length; i += 4)
|
||||
formattedKey[j++] = ConvertStringToUInt(key.Substring(i, 4));
|
||||
return formattedKey;
|
||||
}
|
||||
#endregion
|
||||
#region Base64 encoding/decoding
|
||||
public string Base64Encode(string plainText)
|
||||
{
|
||||
@@ -71,110 +71,12 @@ namespace Utils
|
||||
}
|
||||
/*public string Base64Encode(byte[] data)
|
||||
return Convert.ToBase64String(data);
|
||||
public char[] Base64Encode(byte[] data)
|
||||
{
|
||||
int length, length2;
|
||||
int blockCount;
|
||||
int paddingCount;
|
||||
|
||||
length = data.Length;
|
||||
|
||||
if ((length % 3) == 0)
|
||||
{
|
||||
paddingCount = 0;
|
||||
blockCount = length / 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
paddingCount = 3 - (length % 3);
|
||||
blockCount = (length + paddingCount) / 3;
|
||||
}
|
||||
|
||||
length2 = length + paddingCount;
|
||||
|
||||
Console.WriteLine("length: " + length);
|
||||
Console.WriteLine("length2: " + length2);
|
||||
Console.WriteLine("blockCount: " + blockCount);
|
||||
Console.WriteLine("paddingCount: " + paddingCount);
|
||||
|
||||
byte[] source2;
|
||||
source2 = new byte[length2];
|
||||
|
||||
for (int x = 0; x < length2; x++)
|
||||
source2[x] = x < length ? data[x] : (byte)0;
|
||||
|
||||
byte b1, b2, b3;
|
||||
byte temp, temp1, temp2, temp3, temp4;
|
||||
var buffer = new byte[blockCount * 4];
|
||||
var result = new char[blockCount * 4];
|
||||
|
||||
for (int x = 0; x < blockCount; x++)
|
||||
{
|
||||
b1 = source2[x * 3];
|
||||
b2 = source2[x * 3 + 1];
|
||||
b3 = source2[x * 3 + 2];
|
||||
|
||||
temp1 = (byte)((b1 & 252) >> 2);
|
||||
|
||||
temp = (byte)((b1 & 3) << 4);
|
||||
temp2 = (byte)((b2 & 240) >> 4);
|
||||
temp2 += temp;
|
||||
|
||||
temp = (byte)((b2 & 15) << 2);
|
||||
temp3 = (byte)((b3 & 192) >> 6);
|
||||
temp3 += temp;
|
||||
|
||||
temp4 = (byte)(b3 & 63);
|
||||
|
||||
buffer[x * 4] = temp1;
|
||||
buffer[x * 4 + 1] = temp2;
|
||||
buffer[x * 4 + 2] = temp3;
|
||||
buffer[x * 4 + 3] = temp4;
|
||||
}
|
||||
|
||||
for (int x = 0; x < blockCount * 4; x++)
|
||||
result[x] = SixBitToChar(buffer[x]);
|
||||
|
||||
switch (paddingCount)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
result[blockCount * 4 - 1] = '=';
|
||||
break;
|
||||
case 2:
|
||||
result[blockCount * 4 - 1] = '=';
|
||||
result[blockCount * 4 - 2] = '=';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
private static char SixBitToChar(byte b)
|
||||
{
|
||||
var lookupTable = new char[64] {
|
||||
'A','B','C','D','E','F','G','H','I','J','K','L','M',
|
||||
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
|
||||
'a','b','c','d','e','f','g','h','i','j','k','l','m',
|
||||
'n','o','p','q','r','s','t','u','v','w','x','y','z',
|
||||
'0','1','2','3','4','5','6','7','8','9','+','/'
|
||||
};
|
||||
|
||||
if ((b >= 0) && (b <= 63))
|
||||
{
|
||||
return lookupTable[(int)b];
|
||||
}
|
||||
else
|
||||
{
|
||||
return ' ';
|
||||
}
|
||||
}*/
|
||||
|
||||
*/
|
||||
public string Base64Decode(string base64EncodedData)
|
||||
{
|
||||
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
|
||||
foreach (var i in base64EncodedBytes)
|
||||
Console.WriteLine(" " + i);
|
||||
return Encoding.UTF8.GetString(base64EncodedBytes);
|
||||
}
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user