Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Point Blank (Piercing Blow) (https://forum.zone-game.info/forumdisplay.php?f=204)
-   -   Генерация RSA-ключа (https://forum.zone-game.info/showthread.php?t=39894)

Boris2105 14.01.2016 20:11

Генерация RSA-ключа
 
Как сгенерировать rsa keys на c#,в каком пакете сервер отправляет ключ(желательно структуру пакета) и пожалуйста методы Decrypt,Encrypt rsa на c#.

Sojang 14.01.2016 21:00

Re: Генерация RSA-ключа
 
Про пакет тоже интересно:)

PROGRAMMATOR 14.01.2016 22:41

Re: Генерация RSA-ключа
 
PROTOCOL_BASE_CONNECT_ACK (514)

Код:

h // ? всегда 0
d // sessionId
h // sessionSeed
byte[5] // serverVersion (не строка)
h // длина блока public ключа вместе с его размером (2 байта) и экспонентой (3 байта)
byte[n] // public ключ

Клиент использует CryptoPP, на .NET BouncyCastle Crypto. Примеры имеются в тестах.

Boris2105 14.01.2016 22:51

Re: Генерация RSA-ключа
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 405268)
PROTOCOL_BASE_CONNECT_ACK (514)

Код:

h // ? всегда 0
d // sessionId
h // sessionSeed
byte[5] // serverVersion (не строка)
h // длина блока public ключа вместе с его размером (2 байта) и экспонентой (3 байта)
byte[n] // public ключ

Клиент использует CryptoPP, на .NET BouncyCastle Crypto. Примеры имеются в тестах.


h // длина блока public ключа вместе с его размером (2 байта) и экспонентой (3 байта)
только это не понял , не можешь по подробнее ?

PROGRAMMATOR 14.01.2016 22:58

Re: Генерация RSA-ключа
 
В PointShark открой первый пакет, там всё видно.

Sojang 14.01.2016 23:04

Re: Генерация RSA-ключа
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 405270)
В PointShark открой первый пакет, там всё видно.

Такой вопрос - а для тут вообще rsa?какие пакеты им шифруются?

PROGRAMMATOR 14.01.2016 23:13

Re: Генерация RSA-ключа
 
Boris2105,

http://image.zone-game.info/images/2016/01/14/LZukd.png

То, что я обвёл - сервер отправляет клиенту, без всего остального, так же последние 3 байта выглядят как 01 00 11.

Dom2, авторизация.

Boris2105 14.01.2016 23:18

Re: Генерация RSA-ключа
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 405272)
Boris2105,

http://image.zone-game.info/images/2016/01/14/LZukd.png

То, что я обвёл - сервер отправляет клиенту, без всего остального, так же последние 3 байта выглядят как 01 00 11.

Dom2, авторизация.

а как получить экспоненту?

n3k0nation 14.01.2016 23:51

Re: Генерация RSA-ключа
 
Цитата:

Сообщение от Boris2105 (Сообщение 405273)
а как получить экспоненту?

Это часть ключа. Идите учить матчасть.

Sojang 15.01.2016 00:14

Re: Генерация RSA-ключа
 
написал простенький пример генерации rsa private/public key и получение экспонента)
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Prng;
 
namespace RESCryptoTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
            SecureRandom secureRandom = new SecureRandom(randomGenerator);
            RsaKeyPairGenerator rsa = new RsaKeyPairGenerator();
            rsa.Init(new KeyGenerationParameters(secureRandom, 1024));
            AsymmetricCipherKeyPair pair = rsa.GenerateKeyPair();
            PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
            byte[] serializedPrivateBytes = privateKeyInfo.PrivateKey.ToAsn1Object().GetDerEncoded();
            string privateKey = Convert.ToBase64String(serializedPrivateBytes);
            SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);
            byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
            string publicKey = Convert.ToBase64String(serializedPublicBytes);
            RsaKeyParameters keyParams = (RsaKeyParameters)pair.Public;
            Console.WriteLine("Private key = {0}", privateKey);
            Console.WriteLine("Public key = {0}", publicKey);
            Console.WriteLine("Exponent = {0}", keyParams.Exponent.ToString());
 
            Console.ReadKey();
        }
    }
}
 
 
Code: C#
Добавлено через 12 часов 15 минут
Методы крипта и декрипта
 
        static byte[] EnCrypt(byte[] buf, AsymmetricKeyParameter privateKey)
        {
            var rsa = new OaepEncoding(new RsaEngine());
            rsa.Init(true, privateKey);
            var rsaEncrypted = rsa.ProcessBlock(buf, 0, buf.Length);
            return rsaEncrypted;
        }
 
        static byte[] DeCrypt(byte[] buf, AsymmetricKeyParameter publicKey)
        {
            var rsa = new OaepEncoding(new RsaEngine());
            rsa.Init(false, publicKey);
            var rsaDecrypted = rsa.ProcessBlock(buf, 0, buf.Length);
            return rsaDecrypted;
        }
 
Code: C#


Текущее время: 10:56. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot