powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / RSA шифрование с помощью открытого ключа
79 сообщений из 79, показаны все 4 страниц
RSA шифрование с помощью открытого ключа
    #40086520
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!
ранее не сталкивался и не совсем понимаю как сделать правильно:
есть некий сгенерированный открытый ключ
Код: plaintext
<RSAKeyValue><Modulus>2+VvfVJXR7JUmg65U/njAelZisE2LyEP7JGVVn38COECz++uhviKs+MAr6eB5LROwTd4GaZFj6WefO8FAw8sY16hIsrXn2wvA8r4+FoXsVoyUtt7ifbx7rAARTrGljaYi0CLnbktSg1+A6Rf50nAuJmTIBsFbFl7XHFT2YRvUP0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

с помощью него должен шифровать строку:
и делаю что то вроде этого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
byte[] modBytes = "2+VvfVJXR7JUmg65U/njAelZisE2LyEP7JGVVn38COECz++uhviKs+MAr6eB5LROwTd4GaZFj6WefO8FAw8sY16hIsrXn2wvA8r4+FoXsVoyUtt7ifbx7rAARTrGljaYi0CLnbktSg1+A6Rf50nAuJmTIBsFbFl7XHFT2YRvUP0=".getBytes(StandardCharsets.UTF_8);
        byte[] expBytes = "AQAB".getBytes(StandardCharsets.UTF_8);

        BigInteger modules = new BigInteger(1, modBytes);
        BigInteger exponent = new BigInteger(1, expBytes);

        KeyFactory rsaFactory = KeyFactory.getInstance("RSA");

        RSAPublicKeySpec rsaKeyspec =
                new RSAPublicKeySpec(modules, exponent);
        PublicKey pk = rsaFactory.generatePublic(rsaKeyspec);

        System.out.println("----" + pk);
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pk);
        byte[] bytes = cipher.doFinal(DigestUtils.md5Hex("MyTestText".toLowerCase()).getBytes(StandardCharsets.UTF_8));

        System.out.println(Arrays.toString(bytes));



правильно ли я шифрую текст MyTestText (по ТИ текст должен быть представлен в МД5)
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086529
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не можете шифровать используя только открытый ключ.
Асимметричное шифрование всегда использует ключевую пару - открытый ключ (как правило, "обёрнут" в сертификат) и закрытый ключ, хранящийся "где-то".
Из-за очень низкой скорости асимметричное шифрование используют только для очень коротких данных: электронная подпись (хэш плюс имитовставка) или (ваш случай) для безопасной передачи ключа симметричного шифрования (которое на порядки быстрее).
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086537
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Не понял как закрытый ключ? Закрытый же должен храниться только у поставщика вроде как?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086540
Музаффар, да, все верно. У тебя есть открытый ключ, которым ты можешь зашифровать данные. У поставщика будет закрытый ключ, которым он может расшифровать данные.

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

Твой же пример выглядит рабочим (ты не сказал что у тебя не работает), однако не понятно чего ты пытаешься добиться. Ведь ты шифруешь не текст, а MD5 хеш от текста. Ну расшифруют с той стороны этот хеш, а что с ним делать будут? Возможно ты перепутал и нужно не зашифровать, а подписать сообщение? Т.е. само сообщение шлем (может даже и в открытом виде), а затем еще подпись чтоб убедиться что подписал именно ты. В таком случае мы сначала вычисляем хеш, а затем прогоняем через RSA подпись (не шифрование). Но подпись наоборот - делают закрытым ключом. Ведь принимающая сторона хочет убедиться что это именно ты послал.

В общем дай больше информации.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086546
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

интересно да оказывается на самом деле нужно подписать...
т.е. вот такие этапы:
1. Получить хеш метода путем конкатенации Ключа Приложения и вызываемого метода
2. Подписать хеш публичным ключом и получить токен


т.е. получается все это время шифровал а не подписал походу...
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086547
Музаффар

1. Получить хеш метода путем конкатенации Ключа Приложения и вызываемого метода
2. Подписать хеш публичным ключом и получить токен


т.е. получается все это время шифровал а не подписал походу...
Не совсем:
1. Конкатенировать ничего не надо, первый шаг - это просто получить хеш (aka digest) от текста.
2. Получить подпись этого хеша твоим приватным ключом. Ведь только ты должен мочь подписаться под своим сообщением.

Ну и самому хеш вычислять не надо, вот пример отсюда , Java сама и хеш подсчитает, и подпись сформирует:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public static String sign(String plainText, PrivateKey privateKey) throws Exception {
    Signature privateSignature = Signature.getInstance("SHA256withRSA");
    privateSignature.initSign(privateKey);
    privateSignature.update(plainText.getBytes(UTF_8));

    byte[] signature = privateSignature.sign();
    ...
}

Дальше если надо - эти байты можно в строку превратить то ли в Base64, то ли в hex.

Но с той стороны (которая будет проверять подпись) нужно чтоб они могли проверить подпись. Т.е. им нужны будут: твой публичный ключ, эта подпись, а так же контент который был подписан.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086552
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

авторНе совсем:
1. Конкатенировать ничего не надо, первый шаг - это просто получить хеш (aka digest) от текста.
2. Получить подпись этого хеша твоим приватным ключом. Ведь только ты должен мочь подписаться под своим сообщением.


так я поднял техИнструкцию и там точно так написано
и у меня нет приватного ключа у меня есть только
Код: plaintext
<RSAKeyValue><Modulus>2+VvfVJXR7JUmg65U/njAelZisE2LyEP7JGVVn38COECz++uhviKs+MAr6eB5LROwTd4GaZFj6WefO8FAw8sY16hIsrXn2wvA8r4+FoXsVoyUtt7ifbx7rAARTrGljaYi0CLnbktSg1+A6Rf50nAuJmTIBsFbFl7XHFT2YRvUP0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
т.е. как я понимаю должен подписать некий хэшированный `текст` с помощью полученного РСАКейВелью...

завтра на работе попробую, спасибо.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086587
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас должна быть собственная ключевая пара.
Асимметричное шифрование выполняется на паре "открытый ключ получателя - закрытый ключ отправителя". Расшифровка делается на паре "закрытый ключ получателя - открытый ключ отправителя".

Для электронной подписи, которую должны проверять все, создаётся эфемерная ключевая пара. Далее формируем имитовставку (псевдослучайное число) и криптостойкий хэш сообщения (дайджест).
Шифруем дайджест с имитовставкой на паре "эфемерный открытый ключ - собственный закрытый ключ" и уничтожаем эфемерный открытый ключ. К зашифрованным данным добавляем пару "собственный открытый ключ - эфемерный закрытый ключ" и получаем электронную подпись.
Проверяющий самостоятельно вычисляет дайджест сообщения, расшифровывает данные ЭП и сверяет вычисленный дайджест с имеющимся. Совпадение гарантирует, что шифрование выполнял владелец ключевой пары, открытый ключ которой "приложен" к ЭП.
Имитовставка гарантирует, что каждая электронная подпись (даже одинаковых данных) будет уникальной.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086616
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если я правильно понял методы должны выгладит примерно вот так?
т.е. то что оттуда приходит <RSAKeyValue><Modulus>2+VvfVJXR7JU...Fl7XHFT2YRvUP0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue> для меня будет закрытым ключом и с помощью него подписываю хэшировнный текст?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
void textSign() {
        byte[] modBytes = "v5JmVyqYui4Hg/D2Z+l6tkMgH6aq1O3MuKB05EhrPRifJ4gfbnGZbIuom6FnLMwiC3XM5kVvxwuesTS9lPbPmWYiDk0vjzV/UlC4XJa7tXDFOyRtzUxSWPaVvWB9A8OY0AhYFQYXNqvtql0Z4SxwYMAbzuNpolD2Mi9uEQf2v9s=".getBytes(StandardCharsets.UTF_8);
        byte[] expBytes = "AQAB".getBytes(StandardCharsets.UTF_8);

        BigInteger modules = new BigInteger(1, modBytes);
        BigInteger exponent = new BigInteger(1, expBytes);

        KeyFactory rsaFactory = KeyFactory.getInstance("RSA");

        RSAPrivateKeySpec rsaKeyspec =
                new RSAPrivateKeySpec(modules, exponent);
        PrivateKey pk = rsaFactory.generatePrivate(rsaKeyspec);

        System.out.println(sign(DigestUtils.md5Hex("myTestText".toLowerCase()), pk));
    }

    String sign(String plainText, PrivateKey privateKey) throws Exception {
        Signature privateSignature = Signature.getInstance("SHA256withRSA");
        privateSignature.initSign(privateKey);
        privateSignature.update(plainText.getBytes(StandardCharsets.UTF_8));

        byte[] signature = privateSignature.sign();
        return Arrays.toString(signature);
    }
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086639
Basil A. Sidorov
У вас должна быть собственная ключевая пара.
Асимметричное шифрование выполняется на паре "открытый ключ получателя - закрытый ключ отправителя". Расшифровка делается на паре "закрытый ключ получателя - открытый ключ отправителя".
Но ему не нужно шифрование. Во всяком случае он об этом не говорит.
Basil A. Sidorov

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

Музаффар , да, это похоже на работающий код. Вот только еще обрати внимание на это:
Basil A. Sidorov
Далее формируем имитовставку (псевдослучайное число)
Имитовставка гарантирует, что каждая электронная подпись (даже одинаковых данных) будет уникальной.
Вот этого (называется padding) у тебя не происходит. Это менее безопасно. И в стандартной JDK нет такого алгоритма, для этого нужно подключать BouncyCastle , и инициализировать вот так:
Код: java
1.
2.
3.
4.
Security.addProvider(new BouncyCastleProvider());
...
Signature s = Signature.getInstance("SHA256withRSA/PSS");
s.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1));

Ну а затем подписывать как подписывал.

Если твой продукт очень важен и его обязательно нужно сделать правильно, то вам прийдется нанять какого-то security эксперта. Я эту тему знаю постольку поскольку. Не знаю насчет Basil A. Sidorov. На то что тебе на программерских форумах говорят про security нужно смотреть скептически.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086668
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

ещё один интересный момент, в техинструкции показан пример на СиШарп... но у этого кода результате всегда положительные числа, у меня как положительные так и отрицательные... скорее всего я что то пропускаю, а сам не совсем знаком с этим языком...
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086694
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Тут видимо речь про сохранение конфединциальности. Т.е. никто кроме проверяющего не знает кем было подписано сообщение.
Это не конфиденциальность, а возможность проверки только ограниченным кругом лиц.
Открытый ключ, по своей сути, предполагает сколь угодно широкое распространиение. "Как есть" или "завёрнутым" в сертификат - не так важно.Если же нам нужна обычная подпись, то шифровать (и генерировать эфемерные ключи) не надо насколько мне известно.А теперь подумайте, только медленно и вдумчиво: как без эфемерной ключевой пары обеспечить проверку электронной подписи неопределённым (неограниченным) кругом лиц.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086709
Музаффар , в C# и на Java все будет похоже работать. Там нет проблем прочесть код на другом языке, важно - понимать механизмы, а синтаксис и так поймешь.
Музаффарно у этого кода результате всегда положительные числаЭто значит что в байтах не заполнен 1ый бит. Скорей всего это не бинарные данные, а ASCII текст. Бинарные подписи могут закодировать в Base64 или hex для удобства.

И не нужно пытаться сравнивать подписи по форме байт. У тебя есть способ проверить эту подпись:
Код: java
1.
2.
3.
4.
5.
Signature s = Signature.getInstance("SHA256withRSA/PSS");
s.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1));
s.initVerify(key);
s.update(signedData);
s.verify(signature);



Basil A. Sidorov
Stanislav Bashkyrtsev
Тут видимо речь про сохранение конфединциальности. Т.е. никто кроме проверяющего не знает кем было подписано сообщение.
Это не конфиденциальность, а возможность проверки только ограниченным кругом лиц.
Выше в своем сообщении ты писал про проверку неограниченным кол-вом лиц.
Basil A. Sidorov

Открытый ключ, по своей сути, предполагает сколь угодно широкое распространиение. "Как есть" или "завёрнутым" в сертификат - не так важно.Если же нам нужна обычная подпись, то шифровать (и генерировать эфемерные ключи) не надо насколько мне известно.
А теперь подумайте, только медленно и вдумчиво: как без эфемерной ключевой пары обеспечить проверку электронной подписи неопределённым (неограниченным) кругом лиц.Ну так может не будешь выкабениваться и просто расскажешь в чем проблема? Если бы в security protocol'ах легко было логически вывести все нюансы, то их все бы знали.

Я не вижу проблем:
1. Мой открытый ключ публикуется в доверенном хранилище (GPG хранилище которому доверяет третья сторона, или на моем сайте, или у меня его можно запросить лично).
2. Я подписываю своим закрытым ключом данные и эти открытые данные распространяю вместе с открытой подписью.
3. Мои коллеги могут скачать как данные, так и подпись. Также они могут получить мой открытый ключ из доверенного хранилища. И проверить подпись.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086713
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Выше в своем сообщении ты писал про проверку неограниченным кол-вом лиц
... и утверждал, что для этого нужна эфемерная ключевая пара. В каком месте я противоречу себе ?
2. Я подписываю своим закрытым ключом данные и эти открытые данныеПомедитируйте над тем, что именно содержат открытые данные ЭП и как именно они проверяются.
Ну или почему алгоритмы (де)шифрования на ключевых парах называются а симметричными.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086716
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

авторв C# и на Java все будет похоже работать. Там нет проблем прочесть код на другом языке, важно - понимать механизмы

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
var dataToEncrypt = _encoder.GetBytes(data);
var encryptedByteArray = rsa.Encrypt(dataToEncrypt, false).ToArray();
var length = encryptedByteArray.Count();
var item = 0;
var sb = new StringBuilder();
foreach (var x in encryptedByteArray)
{
    item++;
    sb.Append(x);
    if (item < length)
        sb.Append(",");
}

return sb.ToString();



в том то дело, по ТИ написано надо подписать а тут вроде как шифруется?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086721
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Цифровая подпись ДОКУМЕНТА?
Или устраивает https по ГОСТ?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086723
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
А теперь подумайте, только медленно и вдумчиво: как без эфемерной ключевой пары обеспечить проверку электронной подписи неопределённым (неограниченным) кругом лиц.

Внезапно: распространить среди них открытый ключ. В сертификате или явно.

PS: На самом деле тут маленькая терминологическая путаница: с асимметричными алгоритмами открытый текст можно сначала "расшифровать" закрытым ключом, а потом "зашифровать" открытым для получения оригинала. Это и происходит в процессе подписи, но при чтении его описания - вгоняет в ступор.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086724
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

не совсем документа, вот что написано в ТИ

Вызов каждого метода должен сопровождаться подписью в заголовке запроса. Подписывается только хеш строки состоящей из Ключа приложения и вызываемого метода. Общий алгоритм подписи выглядит так:
1. Получить хеш метода путем конкатенации Ключа Приложения и вызываемого метода
2. Подписать хеш публичным ключом и получить токен
3. Добавить в запрос на сервер 2 заголовка с Именем Приложения и Токеном

1. Уже сделал получил <RSAKeyValue>....</RSAKeyValue>
2. а вот на втором топчусь на одном месте...
3. для реализации 3 нужен 2 )

выше кидал пример кода на шарпе...
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086731
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Имхо вы https изобретаете.
Зачем на уровне приложения каждый get сопровождать подписью?
Есть https, есть токены (подписанные и шифрованные)
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086735
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Внезапно: распространить среди них открытый ключ. В сертификате или явно.
Да не вопрос.
Как использовать только открытый ключ без парного ему закрытого? Свой - нельзя. Чужой? А чей?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086739
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

к сожалению это не моя затея, дали задачу сказали подключиться и получить инфо, а ихними разрабами пока не удалось наладит контакт...

при этом экспайред тайм у этого ключа примерно одна минута ) т.е. при каждом любом запросе я должен получить открытый ключ с ним подписать запрашиваемый метод потом дальше работать... вот как подписать хз если не помогут более знающие в этой области )
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086740
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Просто если сайт на https, то там как раз при вводе пароля и стоит RSA.
2. Он медленный поэтому его не используют с каждым запросом.
Imho
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086744
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Они обязаны были дать демку.
Ты счас без подписи что получаешь от них? Ошибка какая?
Или вообще все с нуля?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086748
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Будет прикольно, если они тебя тестирует и подключится надо просто по SSL)))
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086751
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

так говорю же по ихнему ТИ
по первому пункту честно получаю
Код: plaintext
<RSAKeyValue><Modulus>2+VvfVJXR7JUmg65U/njAelZisE2LyEP7JGVVn38COECz++uhviKs+MAr6eB5LROwTd4GaZFj6WefO8FAw8sY16hIsrXn2wvA8r4+FoXsVoyUtt7ifbx7rAARTrGljaYi0CLnbktSg1+A6Rf50nAuJmTIBsFbFl7XHFT2YRvUP0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

и все сходится с ТИ, дальше уже с помощью этого должен подписать строку хэшированную...
кстати пример кода на Шарпе уже кидал
ну а дальше хз чем они думали

авторОшибка какая?

вроде подписал, но в моих полученных байтах имеются и отрицательные числа...
далее в последнем запросе если что то не так ответом будет (по инструкции) 400 –Bad Request
(ну в общем написан так: Перед тем как вызвать запустить вызываемой метод, Api проведет валидацию подписи с помощью закрытого ключа, и запустит проверку прав доступа Приложения к конкретному методу.
В случае ошибки, Приложение получает ошибку 400 –Bad Request)
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086753
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Так пробуй
https://niels.nu/blog/2016/java-rsa
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086756
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

так вроде вот же 22351915
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086759
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
PetroNotC Sharp,

так вроде вот же 22351915
ну и....?
Всю цепочку собери по новой. С ошибкой и ответом от них.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086763
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

так результат бед реквест, как ранее говорил меня смущает и отрицательные знаки... счас попробую все сделать в одном транзакции может тогда что нибудь получится
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086768
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
PetroNotC Sharp,

так результат бед реквест, как ранее говорил меня смущает и отрицательные знаки... счас попробую все сделать в одном транзакции может тогда что нибудь получится
в военном искусстве это называется обойти крепость и идти дальше.
Делай всю цепочку
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086777
Музаффар
PetroNotC Sharp,

к сожалению это не моя затея, дали задачу сказали подключиться и получить инфо, а ихними разрабами пока не удалось наладит контакт...

при этом экспайред тайм у этого ключа примерно одна минута ) т.е. при каждом любом запросе я должен получить открытый ключ с ним подписать запрашиваемый метод потом дальше работать... вот как подписать хз если не помогут более знающие в этой области )
Это делается для авторизации и, возможно, аутентификации твоего сервиса. Ты шлешь креды своего приложения, ему в ответ ключ. Подпись этим ключом гарантирует что прислал запрос именно авторизованный сервис.
Музаффарв том то дело, по ТИ написано надо подписать а тут вроде как шифруется?Да, выглядит странно. Нужно уточнить у них почему у них encrypt() вызывается, еще и без padding'a! Хотя конечно они со своей стороны могут хранить твой приватный ключ и делать decrypt и так проверять что это твой ключ. Но это звучит как очень странная схема, где данные шифруются асимметрично. Так никто не делает.

МузаффарВызов каждого метода должен сопровождаться подписью в заголовке запроса. Подписывается только хеш строки состоящей из Ключа приложения и вызываемого метода. Общий алгоритм подписи выглядит так:
1. Получить хеш метода путем конкатенации Ключа Приложения и вызываемого метода
2. Подписать хеш публичным ключом и получить токен
3. Добавить в запрос на сервер 2 заголовка с Именем Приложения и ТокеномТут тоже что-то странное. Что такое получить хеш "путем конкатенации". И почему подписывает хеш публичным ключом. Это тоже не правда.

Советую тебе по-лучше разобраться в теории подписей и шифрования, и обсудить все эти вопросы с той командой. Возможно они делают что-то не то.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086788
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
>меня смущает и отрицательные знаки
Покажешь еще раз.
По ссылке что я дал все работает. Шифрует и дешифрует.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086791
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

хоть что то
Код: plaintext
Private token not found on server
т.е. по всей видимости созданный токен не правильный...
вот так выглядит
Код: plaintext
83,-24,52,80,53,28,-47,-123,-74,116,-74,13,32,-79,84,-29,-84,-73,-71,20,101,-61,69,-110,-120,-24,106,69,-32,-63,12,127,105,44,117,-6,-14,-1,-73,-67,43,120,127,115,-33,95,-96,-7,95,-88,-14,-98,81,97,92,122,-119,92,-109,-35,-125,99,-85,-90,21,-90,95,-19,-10,108,-6,47,-13,-125,59,105,107,-69,-68,-11,-65,-75,94,-72,-93,-106,12,36,45,117,-72,45,-33,-99,-5,61,28,-65,14,103,-79,53,-71,-13,44,48,79,70,-93,-51,5,-118,124,-101,56,58,126,70,-103,56,-107,91,0,21,104,59,103,-64

это все после
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
 public String signData(ResponseData responseData, String methodHash) {
        RSAKeyValue rsaKeyValue = xmlToObject(responseData.getPublicKey());

        byte[] modBytes = Base64Utils.decodeFromString(rsaKeyValue.getModulus());
        byte[] expBytes = Base64Utils.decodeFromString(rsaKeyValue.getModulus());

        BigInteger modules = new BigInteger(1, modBytes);
        BigInteger exponent = new BigInteger(1, expBytes);

        KeyFactory rsaFactory = KeyFactory.getInstance("RSA");

        RSAPrivateKeySpec rsaKeySpec =
                new RSAPrivateKeySpec(modules, exponent);
        PrivateKey pk = rsaFactory.generatePrivate(rsaKeySpec);

        return sign(getMethodHash(methodHash), pk);
}


String sign(String plainText, PrivateKey privateKey) throws Exception {
        Signature privateSignature = Signature.getInstance("SHA1withRSA");
        privateSignature.initSign(privateKey);
        privateSignature.update(plainText.getBytes(StandardCharsets.UTF_16));

        byte[] signature = privateSignature.sign();
        return Arrays.toString(signature);
    }
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086796
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Шо це таке ТИ?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086798
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

ТехИнструкция )
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086799
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
>вот так выглядит
=...
Я проверяю как по ссылке.
"мама мыла раму"
- зашифровал
- расшифровал и прочитал.
А ты на какие то минусы смотришь
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086801
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
PetroNotC Sharp,

ТехИнструкция )
)))))
У нас ТЗ по ГОСТ дают))))
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086809
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Музаффар,
>вот так выглядит
=...
Я проверяю как по ссылке.
"мама мыла раму"
- зашифровал
- расшифровал и прочитал.
А ты на какие то минусы смотришь



это я тоже проверял все норм, но по ТехИнструкции после выполнения 22352067 должно получится массив байтов и дальше для получения точнее для реализации запроса в хидере должен указать
Код: plaintext
Authorization-Token: 62,148,123,57,253,121,179,128,57,...

и тот же вопрос должен шифровать или же подписать хотя по коду Шарпа 22352067
Код: c#
1.
var encryptedByteArray = rsa.Encrypt(dataToEncrypt, false).ToArray();


это метод шифрование https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsacryptoserviceprovider.encrypt?view=net-5.0

есть ещё sign https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsacryptoserviceprovider.signdata?view=net-5.0
но они говорят подписать но в коде шифруют... или я не правильно читаю?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086821
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
По разному можно говорить значение слова Подписал ЭЦП.
Делай цепочку.
Делай скрины на F5
Делай цепочку с curl
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086823
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу, F12
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086827
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Тьфу, F12

зачем Ф12? я с браузером не работаю )
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40086832
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
PetroNotC Sharp
Тьфу, F12

зачем Ф12? я с браузером не работаю )
и протокол не http)
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087030
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Как использовать только открытый ключ без парного ему закрытого?

Применить к данному документу (в данном случае подписи). Ключ самодостаточен.

Закрытый ключ - у подписывающего, для проверки подписи он напрочь не нужен.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087051
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Применить к данному документу
Как именно применить?

Я понимаю или такое:
При подписании: генерируем эфмерную ключевую пару, формируем дайджест, имитовставку и шифруем их на паре "открытый эфемерный ключ - закрытый ключ подписанта";
Уничтожаем открытый эфемерный ключ и формируем ЭП в составе "закрытый эфемерный ключ, открытый ключ отправителя и шифр, содержащий дайджест с имитовставкой";
При проверке ЭП: считаем дайджест документа, расшифровываем полученное на полученной паре "закрытый эфемерный ключ - открытый ключ подписанта" и сверяемся.

Или такое:
При подписании: формируем дайджест, имитовставку и шифруем их на паре "открытый ключ проверяющего - закрытый ключ подписанта";
Отправляем шифровку проверяющему. Если необходимо - добавляем открытый ключ подписанта;
При проверке: проверяющий считает дайджест и расшифровывает полученное на паре "открытый ключ подписанта - закрытый ключ проверяющего" и сверяемся.

А какой ещё вариант формирования криптографической ЭП?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087109
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
походу я не должен подписать, т.к. подпись идет с помощью приватного ключа

начал дебажит рабочий код от сишарпа

как выяснил на шарпе подписанная строка получается в 128 байтов, в это время на java 172... проблема может быть в кодировании/декодировании или алгоритме шифрование и т.д.?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087134
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Какая разница скока байт?
Они на шарпе принимают запросы?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087137
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

да выше код на шарпе вполне рабочий, походу я не правильно получаю так называемый токен (т.е. шифрованную строку представленную в байтах)
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087147
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
PetroNotC Sharp,

да выше код на шарпе вполне рабочий, походу я не правильно получаю так называемый токен (т.е. шифрованную строку представленную в байтах)

-где цепочка?
-что значит рабочий? Как узнал?
- где curl?
- как можно неправильно получить токен? Половинку прочитал что ли? Наверно получил но неверно РАСКОДИРОВАЛ?
И ТАК ВО ВСЕМ ТВОЕМ ОТВЕТЕ. НИЧЕГО НЕ ПОНЯТНО
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087151
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
НИЧЕГО НЕ ПОНЯТНО

лично мне ничего не понятно с самого первого сообщения
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087152
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

и так вот рабочий код на шарпе
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string methodHash = "1a9d3de2408d240e3157fff159184d9e";
            string publicKey =
                "<RSAKeyValue><Modulus>pxDTxv/WaZCn9b/BaPjnTD83M/Y7nvswBS4Jm/7Ml6n8/KTkNPl5M1NGpQKtPBAN6qLR+BWPJQupQ3sWit1uwpIvXk6felC/Ee9Rsm66nFFqb2+pTrMc4uqSRKuUPq39iVJqwrtVCaIrDmtI+eEBsNVi9uVYnH6IcUp6d9yfPOM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
            Encryptor encryptor = new Encryptor();
            string token = encryptor.EncryptRSA(methodHash, publicKey);
            Console.WriteLine(token);
        }
    }

    class Encryptor
    {
        private static UnicodeEncoding _encoder = new UnicodeEncoding();

        public string EncryptRSA(string data, string publicKey)
        {
            try
            {
                var rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(publicKey);
                
                Console.WriteLine(rsa.KeyExchangeAlgorithm);
                var dataToEncrypt = _encoder.GetBytes(data);
                var encryptedByteArray = rsa.Encrypt(dataToEncrypt, false).ToArray();
                var length = encryptedByteArray.Count();
                var item = 0;
                var sb = new StringBuilder();
                Console.WriteLine(length);
                foreach (var x in encryptedByteArray)
                {
                    item++;
                    sb.Append(x);
                    if (item < length)
                        sb.Append(",");
                }

                return sb.ToString();
            }
            catch (Exception ex)
            {
                throw new RSAException();
            }
        }

        class RSAException : Exception
        {
            public RSAException() : base("RSA Encryption Error")
            {
            }
        }
    }
}


результат получаю что то вроде этого
104,179,63,56,32,192,231,190,182,4,131,204,186,238,21,93,211,176,14,216,218,107,35,79,50,193,164,174,169,226,14,123,216,87,110,31,169,242,206,179,90,246,158,150,192,7,83,221,62,102,154,3,74,125,73,48,93,70,249,37,110,193,4,93,37,237,98,228,56,152,49,177,152,151,136,138,36,24,44,152,56,204,200,185,11,190,165,
134,66,242,5,177,179,12,36,5,193,192,125,53,68,73,191,60,19,181,164,156,94,182,107,208,29,243,11,188,11,11,228,8,237,146,64,220,112,155,173,101

далее по документации в хидере Authorization-Token указываю этот полученный результат, ну честно получаю ответ по моему запросу

в JAVA делаю примерно вот это

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
String text = "1a9d3de2408d240e3157fff159184d9e";

        String _modulus = "pxDTxv/WaZCn9b/BaPjnTD83M/Y7nvswBS4Jm/7Ml6n8/KTkNPl5M1NGpQKtPBAN6qLR+BWPJQupQ3sWit1uwpIvXk6felC/Ee9Rsm66nFFqb2+pTrMc4uqSRKuUPq39iVJqwrtVCaIrDmtI+eEBsNVi9uVYnH6IcUp6d9yfPOM=";
        String _exponent = "AQAB";

        BigInteger modulus = new BigInteger(1, Base64Utils.decodeFromString(_modulus));
        BigInteger exponent = new BigInteger(1, Base64Utils.decodeFromString(_exponent));

        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(modulus, exponent);
        PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec);
        
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] bytes = cipher.doFinal(text.getBytes(StandardCharsets.UTF_16LE));
   
        System.out.println(Arrays.toString(Base64Utils.encode(bytes)));



проверяю на том же месте, и получаю ответ вроде Could not decrypt token!

мне кажется проблема в кодировках чтоли.. хз пока


а на счет цепочки: паблик кей дается на 10 дней по этому нет необходимости указать тут получение этого ключа, к тому же с одним и тем же ключом тестировал в обоих кодах
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087153
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
PetroNotC Sharp
НИЧЕГО НЕ ПОНЯТНО

лично мне ничего не понятно с самого первого сообщения
))))
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087161
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,

Цепочка - это термин мы тут придумали чтобы ты рассказал архитектуру системы.
Еще зовут юз кейсы. По русски ВИ вариант использования.
Пример
- взял чайник
- налил воду
Или у тебя
- сервер с АPi куда шлю запрос serv1.ru
- шлю запрос....
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087162
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вопросы все в 22352658 не ответил.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087163
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
3.
Сделать СВОЙ СЕРВЕР И КЛИЕНТ.
Отправил и сам получил дешифровал "мама мыла раму"?
?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087165
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про http тоже не ответил.
Надо отвечать на все вопросы что есть в топике.
Работай!
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087223
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

автор-где цепочка?
-что значит рабочий? Как узнал?
- где curl?
- как можно неправильно получить токен? Половинку прочитал что ли? Наверно получил но неверно РАСКОДИРОВАЛ?
И ТАК ВО ВСЕМ ТВОЕМ ОТВЕТЕ. НИЧЕГО НЕ ПОНЯТНО


есть входные параметры предоставленные со стороны стороннего сервиса (appName, appPass, appKey)

1. Аутентификация, т.е. получения публичного ключа.
для этого необходимо сделать запрос на метод auth/getPubKey, указав appName и md5(appPass)
как итог получаем что то вроде этого:
Код: plaintext
{"PublicKey":"<RSAKeyValue><Modulus>pxDT....POM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>","PublicKeyExpiration":"2021-08-9T14:36:16","code":0,"msg":"OK","timeStamp":"2021-07-30T09:36:01.6834073Z"}

далее Подпись метода:
Вызов каждого метода должен быть с подписью в заголовке запроса. Подписывается только хэш строки из appKey и вызываемого метода. Общий алгоритм подписи выглядит так:
1. Получить хэш метода путем конкатенации appKey и method
2. Подписать хэш публичным ключом с который был получен при аутентификации и получить токен
3. Добавить в запрос на сервер 2 заголовка с appName и Токеном

что было сделано в этой части:
1.
Код: java
1.
DigestUtils.md5Hex(applicationKey + method.toLowerCase())



2. Создаю PublicKey на основе публичного ключа (из аутентификации)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        String _modulus = "pxDT...POM=";
        String _exponent = "AQAB";

        BigInteger modulus = new BigInteger(1, Base64Utils.decodeFromString(_modulus));
        BigInteger exponent = new BigInteger(1, Base64Utils.decodeFromString(_exponent));

        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(modulus, exponent);
        PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec);



далее сказано подписать публичным ключом хэшированный метод, но т.к. подпись осуществляется с помощью не публичного а приватного ключа и к тому же по рабочему примеру на C# полагаю что надо не подписать а шифровать публичным ключом
Код: java
1.
2.
3.
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] bytes = cipher.doFinal(text.getBytes(StandardCharsets.UTF_16LE));



далее вопрос, если до этого место правильно делаю скорее всего проблема будет в конце т.е. должен ли декодировать/кодировать в бейс64 для получение токена, и почему у меня опять таки отрицательные элементы получаются? как я помню отрицательные элементы изза того что полученный элемент больше чем 127...

ну в добавок, почему я говорю что гдето не так?, потому что третий этап (Добавить в запрос на сервер 2 заголовка с appName и Токеном) возвращает сообщение Could not decrypt token!

думаю я ответил на Ваши все вопросы, или что то остался?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087225
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
ВИ напиши в 5-10 строк
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087229
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

нашел проблему!!!!!!!!!!!!! ))))))
делал все правильно за исключением специфики языка...
дело в том что в C# нет знака в байтах а я уже многократно спрашивал про отрицательных знаков.... и тог решением был
b & 0xFF
т.е. итог был после шифрования:
Код: java
1.
2.
3.
4.
         for (byte b : bytes) {
            i++;
            sb.append(b < 0 ? b & 0xFF : b).append(i < bytes.length ? "," : "");
        }



в Общем всем спасибо, помогли даже очень. )
есть ещё один вопрос но это уже сюда не относится для этого создам новую ветку скорее всего, если не получится сделать конечно, опять же большое спасибо!
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087230
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не умеешь писать то скажи.
Я начну а ты поправляй
ВИ:
1. первый запрос к serv1.ru auth/getPubKey и получаем строку (аутентификац)
2. По строке зашифровать RSA МЕТОДОМ мой запрос getСписокДолжников(дата)
3. Отправить GET с двумя заголовками заг1, заг2 и запросом шифром.
4. Получить ответ и.....
...
Так?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087232
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
PetroNotC Sharp,

нашел проблему!!!!!!!!!!!!! ))))))
делал все правильно за исключением специфики языка...
дело в том что в C# нет знака в байтах а я уже многократно спрашивал про отрицательных знаков.... и тог решением был
b & 0xFF
т.е. итог был после шифрования:
Код: java
1.
2.
3.
4.
         for (byte b : bytes) {
            i++;
            sb.append(b < 0 ? b & 0xFF : b).append(i < bytes.length ? "," : "");
        }




в Общем всем спасибо, помогли даже очень. )
есть ещё один вопрос но это уже сюда не относится для этого создам новую ветку скорее всего, если не получится сделать конечно, опять же большое спасибо!

Я тоже не мог понять зачем после шифрования этот цикл?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087234
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удачи!
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087236
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодец что бьешь на топики а не все в одну кучу +100
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087250
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

Я тоже не мог понять зачем после шифрования этот цикл?

а по другому как получить байты без отрицательных знаков?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087257
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Зачем байты то? Это прогеры вашего сервака придумали?
Я выше сделал пример RSA по моей ссылке вверку.
Все работает. В токен и хидер запроса пишут символы текста а не байты
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087263
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
а по другому как получить байты без отрицательных знаков?
Не байты, а целые - нет StringBuffer.append(byte), но есть SB.append(int).
В Java целочисленные типы знаковые, а поэтому байты со значением от 0x80 до 0xFF будут приведены к целым со значениями от 0xFFFFFF80 до 0xFFFFFFFF.
И, кстати, тернарный оператор там лишний - проверка условия, скорее всего, замедлит код сильнее, чем безусловное маскирование, которое компилятор может ещё и соптимизировать до "копирование без знакового расширения".
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087333
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
А какой ещё вариант формирования криптографической ЭП?

Как это делается в RSA PKCS #1:
1. получаем хэш документа;
2. получаем хэш этого хэша;
3. применяем к результату алгоритм RSA с приватным ключом подписанта;
4. Результат форматируем определённым способом и нарекаем подписью.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087357
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... хеш от хеша.

Что-то в этом есть подозрительное. Будь здесь парочка евреев типа Циммермана или Шнайера
(блин это не расизм а констатация) то они-бы наверняка нашли бы уязвимость или на худой
конец процитировали что-то умное из Талмуда.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087364
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Хммм.. Если посмотреть ссылку выше, то там пример без всяких заумных хешей.
Просто два метода decode() и encode()
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087492
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Просто два метода decode() и encode()

Осталась сущая мелочь: найти между ними различие для RSA...
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087505
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
PetroNotC Sharp
Просто два метода decode() и encode()

Осталась сущая мелочь: найти между ними различие для RSA...
не понял тебя. Они есть по ссылке. Написаны и работают. Тестируй.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087608
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
не понял тебя.

Алгоритм RSA это y = x d % m. причём как на шифрование, так и на расшифровывание. Разница только в используемом ключе.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40087613
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Да. Там две функции почти одинаковы
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40088185
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ребят один момент
учитывая что у сервера прайвет кий, и у клиента паблик
то как определить кто шифровал?

т.е. я передаю паблик и Ивану и Артёму, как определить кто из них шифровал сообщение? или что то не правильно думаю?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40088189
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если "кто шифровал", то я выступаю в роли расшифровывающего. А значит Иван и Артём передают мне свои публичные ключи.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40088191
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
По логину паролю?
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40088193
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Если "кто шифровал", то я выступаю в роли расшифровывающего. А значит Иван и Артём передают мне свои публичные ключи.

Обычно публичный ключ является частью сертификата. А в сертификате прописаны все реквизиты чтоб понять с кем
имеешь дело.

Но чтоб в сертификатах не было дублей и бардака - существуют центры сертификации которые заверяют своей подписью
что сертификат верен.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40088195
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Обычно публичный ключ является частью сертификата.
У топикстартера, как я понимаю, всё необычно.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40088196
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Если сертификат, тогда имхо шифруется КАНАЛ ТРАНСПОРТА. Как SSL/HTPPS.
Тогда непонятно что там у увтора.
...
Рейтинг: 0 / 0
RSA шифрование с помощью открытого ключа
    #40088197
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
mayton
Обычно публичный ключ является частью сертификата.
У топикстартера, как я понимаю, всё необычно.
))
...
Рейтинг: 0 / 0
79 сообщений из 79, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / RSA шифрование с помощью открытого ключа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]