Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Уважаемые программисты помогите преобразовать


Автор: desti1984 28.9.2009, 18:01
Код

/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version. This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details. You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.loginserver.crypt;

import java.math.BigInteger;
import java.security.KeyPair;
import java.security.interfaces.RSAPublicKey;

import org.apache.log4j.Logger;

/**
 *
 */
public class ScrambledKeyPair {
    private static Logger _log = Logger.getLogger(ScrambledKeyPair.class
            .getName());
    public KeyPair _pair;
    public byte[] _scrambledModulus;

    public ScrambledKeyPair(final KeyPair pPair) {
        this._pair = pPair;
        this._scrambledModulus = this
                .scrambleModulus(((RSAPublicKey) this._pair.getPublic())
                        .getModulus());
    }

    private byte[] scrambleModulus(final BigInteger modulus) {
        byte[] scrambledMod = modulus.toByteArray();

        if (scrambledMod.length == 0x81 && scrambledMod[0] == 0x00) {
            final byte[] temp = new byte[0x80];
            System.arraycopy(scrambledMod, 1, temp, 0, 0x80);
            scrambledMod = temp;
        }
        // step 1 : 0x4d-0x50 <-> 0x00-0x04
        for (int i = 0; i < 4; i++) {
            final byte temp = scrambledMod[0x00 + i];
            scrambledMod[0x00 + i] = scrambledMod[0x4d + i];
            scrambledMod[0x4d + i] = temp;
        }
        // step 2 : xor first 0x40 bytes with last 0x40 bytes
        for (int i = 0; i < 0x40; i++)
            scrambledMod[i] = (byte) (scrambledMod[i] ^ scrambledMod[0x40 + i]);
        // step 3 : xor bytes 0x0d-0x10 with bytes 0x34-0x38
        for (int i = 0; i < 4; i++)
            scrambledMod[0x0d + i] = (byte) (scrambledMod[0x0d + i] ^ scrambledMod[0x34 + i]);
        // step 4 : xor last 0x40 bytes with first 0x40 bytes
        for (int i = 0; i < 0x40; i++)
            scrambledMod[0x40 + i] = (byte) (scrambledMod[0x40 + i] ^ scrambledMod[i]);
        ScrambledKeyPair._log.trace("Modulus was scrambled");

        return scrambledMod;
    }
}


очень нужно переделать в CSharp

Автор: mr.DUDA 29.9.2009, 01:25
Код
// ну как бы код за вас никто не напишет, 
// слишком дофига в вашем примере специфичных классов
// для криптографии в Java и поэтому давайте задавайте
// конкретные вопросы что вам лично непонятно в C#
// ответим

Автор: LaiQ 24.4.2010, 14:41
Здравствуйте, случайно наткнулся на эту тему в поисковике. Интересует этот же файл, но не весь. 
Код

_scrambledModulus = scrambleModulus(((RSAPublicKey) _pair.getPublic()).getModulus());
        }

        private byte[] scrambleModulus(BigInteger modulus)


если не трудно, объясните пожалуйста что подразумевается под ((RSAPublicKey) _pair.getPublic()).getModulus(), и почему Java допускает конвертирование в BigInt.
Я предположил что в это Public Key. Но при использовании Конвертации во время работы приложения возникает ошибка Не удалось привести тип объекта RSAParameter к типу IConvertible

Заранее извиняюсь за свои не совсем большие познания я ЯП smile

Автор: diadiavova 24.4.2010, 15:19
Цитата(LaiQ @  24.4.2010,  15:41 Найти цитируемый пост)
и почему Java допускает 

Может этот вопрос уместнее было бы задать в разделе, посвящённом Java?

Автор: LaiQ 24.4.2010, 15:41
Да не в том дело.
А том как написать это на CSharp'e

Автор: Экскалупатор 24.4.2010, 16:01
LaiQ, я думаю что если ты выразишь мысль в виде: "как мне сделать что то(свой вариант) на C#?", то тебе скорее всего подскажут. а спрашивать почему что то в яве это не в этой ветке. я думаю тут даже никто разбираться сильно не станет что там ява делает, и что именно ты хочешь переделать на шарп..

Добавлено через 1 минуту
Цитата(LaiQ @  24.4.2010,  14:41 Найти цитируемый пост)
А том как написать это на CSharp'e 


выскажи что именно "это" ты хочешь сделать.

Автор: LaiQ 24.4.2010, 16:12
Хочу узнать аналог 
Код

_scrambledModulus = scrambleModulus(((RSAPublicKey) _pair.getPublic()).getModulus());
 на CSharp

Как мне это сделать?

Автор: Экскалупатор 24.4.2010, 17:09
Цитата(LaiQ @  24.4.2010,  15:12 Найти цитируемый пост)
Хочу узнать аналог 


а что именно делает эта строка? сначала узнай что тебе нужно(а это нужно узнать в ветке форума, которая посвящена яве) а потом уже тут спрашивай как это сделать на шарпе.

Автор: diadiavova 24.4.2010, 17:37
Цитата(LaiQ @  24.4.2010,  17:12 Найти цитируемый пост)
Хочу узнать аналог 

На шарпе это записывается так же(языки очень похожи), другой вопрос, что в этом коде используются специфичные для явы классы и прочие дела и вот их то как раз в этой ветке мало кто знает. Переводить код "дословно" - занятие крайне неблагодарное, такой код зачастую даже в рамках одной технологии не хочет работать как надо, портировать код можно только "по смыслу", то есть иходя из того, что он делает.

Автор: GoldFinch 24.4.2010, 17:43
картина маслом:
быдлокодеры переносят l2j на c#

Добавлено через 7 минут и 47 секунд
Цитата(LaiQ @  24.4.2010,  17:12 Найти цитируемый пост)

_scrambledModulus = scrambleModulus(
    ((RSAPublicKey) _pair.getPublic()).getModulus()
);

вот в этой строке у поля _pair вызывается getPublic() чтобы получить открытую пару ключа

затем она приводится к типу RSAPublicKey и у результата вызывается getModulus()
т.е. из этой пары берется только модуль (открытая экспонента зашита клиент, ее передавать не надо)

потом вызывается метод scrambleModulus, чтобы преобразовать этот модуль (тип BigInt) в скремблированный массив байт

и наконец этот массив присваивается полю  scrambledModulus 

Автор: Exai1e 24.4.2010, 19:02
мне кажется от ТСа требуют что то подобного рода:
пример:
Цитата

Этот метод в коде приведенным на Java, считывает файл и диска и шифрует его используя алгоритм VasyPupkin в дальнейшем шифрованные данные записываются в файл/передаются в сокет/в буфер. Как реализовать подобное на языке C#.


GoldFinch, то есть более абстрактно, а не то что там вызывается метод А потом метод Б в итоге получается С

Автор: PashaPash 24.4.2010, 19:11
LaiQ, аналог на C#:
Код

RSACryptoServiceProvider provider = .....
byte  [] modulus = provider.ExportParameters(false).Modulus;

Автор: LaiQ 24.4.2010, 21:14
Спасибо всем огромное за помощь, вы мне очень помогли!

to GoldFinch ну криптография бывает не только в серверах игр))))

Автор: Настюshа 16.10.2010, 14:32
Здравствуйте)
Мне надо разработать конвертер с помощью Windows Form...
При нажатии кнопки открывалась БД и происходила выборка данных в новую таблицу.
При нажатии 2ой кнопки формировался отчет (данные берется из новой таблицы)...
В C# я никогда не работала, и мне сложновато это сделать. smile 

Автор: Экскалупатор 16.10.2010, 17:36
Настюshа, по правилам форума должен быть один вопрос на одну тему. в этой ты уже третья. а ты один и тот же вопрос запостила уже в нескольких темах. ты хочешь что бы тебе помогли сделать? тогда задавай нормальные конкретные ВНЯТНЫЕ вопросы. а если ты хочешь что бы за тебя сделали и тебе отдали готовую программу, то тебе в отдел фрилансеров надо обращаться. можешь мне в личку написать я скажу тебе цену и обсудим детали. и получишь свою программу. а на те вопросы что ты пишешь(и как ты их задаешь), в которых понятно что спрашивающий не понимает что он спрашивает, тебе ничего отвечать скорее всего не будут. в лучшем случае посоветуют почитать учебник. начать с основ.

Добавлено через 1 минуту и 29 секунд
и кстати, тема про преобразование, при чем тут вообще твоя программа?

Автор: Настюshа 16.10.2010, 19:18
Экскалупатор я не прошу написать мне программу, а прошу помочь...Я не виновата, что здесь куча тем и я не могу найти себе подходящую...А там где я пишу мне говорят, что не здесь..Вместо того, чтоб критиковать, мог бы помочь или сказать в какой теме надо написать...

Автор: Экскалупатор 16.10.2010, 19:37
))) создай СВОЮ тему и там задавай. только разберись плиз что ты хочешь. спрашивай более конкретно. а не "у меня есть кнопка, мне нужно получить отчет из базы".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)