Расшифруйте CRC32, используя статический ключ в php (для генерации CRC используется класс C #)

Это мой класс для создания хэша CRC32. Это не мой класс, я нашел его в интернете. Но я не могу заставить работать SSL или AES, потому что у меня есть только базовые знания в области кодирования.
Я делаю лаунчер для своей маленькой игры, ничего особенного. Мне не нужно сверхсильное шифрование, мне нужно только скрывать клиентские запросы от случайных.

Где-то в Интернете люди говорили, что CRC32 — это односторонний хэш, но, очевидно, это не так.
Внутри класса есть функция для шифрования и дешифрования, оба работают очень хорошо.

Я проверил отправку хэшированных и не хэш
В будущем я планирую создать на жестком диске пользователей скрытый файл со случайным текстом, взять его контрольную сумму и использовать его в качестве ключа для генерации CRC, а также в качестве идентификатора игрового автомата. Ключ будет отправлен только при первом запуске приложения. Я знаю, что это небезопасно, но для меня этого достаточно.

// Copyright (c) Damien Guard.  All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
// Originally published at http://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Namechanger
{
/// <summary>
/// Implements a 32-bit CRC hash algorithm compatible with Zip etc.
/// </summary>
/// <remarks>
/// Crc32 should only be used for backward compatibility with older file formats
/// and algorithms. It is not secure enough for new applications.
/// If you need to call multiple times for the same data either use the HashAlgorithm
/// interface or remember that the result of one Compute call needs to be ~ (XOR) before
/// being passed in as the seed for the next Compute call.
/// </remarks>
public class StringEncryption
{
private readonly Random random;
private readonly byte[] key;
private readonly RijndaelManaged rm;
private readonly UTF8Encoding encoder;

public object Assert { get; private set; }
public StringEncryption()
{
this.random = new Random();
this.rm = new RijndaelManaged();
this.encoder = new UTF8Encoding();
this.key = Convert.FromBase64String("cGFzc3dvcmRz");
}

public string Encrypt(string unencrypted)
{
var vector = new byte[16];
this.random.NextBytes(vector);
var cryptogram = vector.Concat(this.Encrypt(this.encoder.GetBytes(unencrypted), vector));
return Convert.ToBase64String(cryptogram.ToArray());
}

public string Decrypt(string encrypted)
{
var cryptogram = Convert.FromBase64String(encrypted);
if (cryptogram.Length < 17)
{
throw new ArgumentException("Not a valid encrypted string", "encrypted");
}

var vector = cryptogram.Take(16).ToArray();
var buffer = cryptogram.Skip(16).ToArray();
return this.encoder.GetString(this.Decrypt(buffer, vector));
}

private byte[] Encrypt(byte[] buffer, byte[] vector)
{
var encryptor = this.rm.CreateEncryptor(this.key, vector);
return this.Transform(buffer, encryptor);
}

private byte[] Decrypt(byte[] buffer, byte[] vector)
{
var decryptor = this.rm.CreateDecryptor(this.key, vector);
return this.Transform(buffer, decryptor);
}

private byte[] Transform(byte[] buffer, ICryptoTransform transform)
{
var stream = new MemoryStream();
using (var cs = new CryptoStream(stream, transform, CryptoStreamMode.Write))
{
cs.Write(buffer, 0, buffer.Length);
}

return stream.ToArray();
}

public void EncryptDecrypt()
{
// Arrange
var subject = new StringEncryption();
var originalString = "Testing123!£$";

// Act
var encryptedString1 = subject.Encrypt(originalString);
var encryptedString2 = subject.Encrypt(originalString);
var decryptedString1 = subject.Decrypt(encryptedString1);
var decryptedString2 = subject.Decrypt(encryptedString2);
}
}

Mycode, что я отправляю на php

var subject = new StringEncryption();
var originalString = "" + getCheckSumFile(assemblypath) + " " + unixTimestamp + "";
var hashed = subject.Encrypt(originalString);
var unhashed = subject.Decrypt(hashed);

string str = string.Concat("http://127.0.0.1/here/?nick=", nick, "&server=", server, "&data=", hashed);
Network.getData(str);

Пока что все работает только для меня, я не знаю, как расшифровать CRC32 с помощью ключа с помощью php? Я не нахожу никакой информации об этом вообще, большинство руководств php использует только хэш crc без намерения расшифровать его ключом.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector