4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
1

Шифрование RSA

01.06.2015, 14:18. Показов 8886. Ответов 14
Метки нет (Все метки)

Имеется 1 публичный ключ и текст. Нужно зашифровать текст по методу RSA

Добавлено через 20 минут
Пользовался RSACALC, но в потоке её не использовать

Добавлено через 17 часов 20 минут
Вверх!

Добавлено через 12 минут
Вот то что надо: http://www.sources.ru/csharp/RSACryptoPad.html
Но только для delphi
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2015, 14:18
Ответы с готовыми решениями:

RSA шифрование
Привет Программерам, у меня вопрос есть программа которая шифрует и дешифрует методом РСА , но дело...

rsa шифрование
нашел исходники- http://plagiata.net.ru/?p=140 но не разберусь. как присваивать свои ключи?

Шифрование алгоритмом RSA
Задается исходная строка и надо зашифровать её по алгоритму RSA Для работы с большими числами...

Шифрование текста в RSA
Есть ли какие нибудь статьи для новичков? Исходник есть но в нем я ничего не понял: function...

14
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.06.2015, 14:27 2
а что вам гугля не дает результатов при поисках?
Интересно вот, а мне почему - то дает, даже в первых ссылках по поиску кучу примеров.
0
4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
01.06.2015, 15:00  [ТС] 3
Ну вот дайте действительно хороший пример, который вы якобо нашли. Я сидел в гугле 2 дня с этим вопросом и ничего того, что действительно мне надо, я не нашёл на delphi, только на c#
0
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.06.2015, 15:42 4
Цитата Сообщение от parka242 Посмотреть сообщение
Ну вот дайте действительно хороший пример
я чем-то вам обязан?
Цитата Сообщение от parka242 Посмотреть сообщение
который вы якобо нашли
есть сомнения???
Цитата Сообщение от parka242 Посмотреть сообщение
Я сидел в гугле 2 дня с этим вопросом и ничего того, что действительно мне надо, я не нашёл на delphi, только на c#
конкретно под свою задачу искали? не факт, что 1 в 1 где-то есть то, что вам надо...
0
4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
01.06.2015, 16:00  [ТС] 5
Вам самому не смешно? Если вы не можете ответить по теме, то , пожалуйста, прошу вас удалиться и не набивать бесполезные сообщения.

Добавлено через 6 минут
Цитата Сообщение от Arcor Посмотреть сообщение
конкретно под свою задачу искали? не факт, что 1 в 1 где-то есть то, что вам надо...
В гугле полно результатов, где используется не только публичный ключ.
0
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.06.2015, 16:05 6
Цитата Сообщение от parka242 Посмотреть сообщение
Я сидел в гугле 2 дня с этим вопросом и ничего того, что действительно мне надо
Цитата Сообщение от parka242 Посмотреть сообщение
В гугле полно результатов, где используется не только публичный ключ.
как-то одно и второе не вяжется друг с другом... вы не заметили?

ну так давайте ваши находки сюда, на форум, переделаем/доделаем еще что-то... иначе и продолжится бестолковая переписка тут. чтов ы хотете в таком случае получить то? если вы сами не принимаете участия в решении проблемы, по крайней мере нам этого не видно пока что!
0
4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
01.06.2015, 17:42  [ТС] 7
Цитата Сообщение от Arcor Посмотреть сообщение
как-то одно и второе не вяжется друг с другом... вы не заметили?
Цитата Сообщение от parka242 Посмотреть сообщение
Имеется 1 публичный ключ
больше ничего

Добавлено через 43 минуты
Нужен готовый пример..

Добавлено через 8 минут
В результате шифрования должно быть вроде этого:


Добавлено через 34 минуты
Пожалуйста, очень нужно готовое решение!

Добавлено через 7 минут
Есть код:

Delphi
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
function RSAEncrypt(Source: String; Key: RawByteString): RawByteString;
var
  KeyPair: TStringStream;
  RSA: HCRYPTPROV;
  HPair: HCRYPTKEY;
  DDataSize, EDataSize: DWORD;
 
begin
  Result := '';
  KeyPair := TStringStream.Create(Key);
  if CryptAcquireContext(@RSA, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) then
  try
    if CryptImportKey(RSA, PByte(KeyPair.Memory), KeyPair.Size, 0, 0, @HPair) then
    try
      EDataSize := SizeOf(Source);
      if CryptEncrypt(HPair, 0, true, 0, nil, @EDataSize, 0) then
      begin
        Result := Source;
        SetLength(Result, EDataSize);
        DDataSize := Length(Source) * SizeOf(Char);
        if not(CryptEncrypt(HPair, 0, True, 0, PByte(PChar(Result)), @DDataSize, EDataSize)) then
          Result := '';
      end;
    finally
      CryptDestroyKey(HPair);
    end;
  finally
  CryptReleaseContext(RSA, 0);
  end;
  FreeAndNil(KeyPair);
end;
Но он не работает, результата нет вообще
0
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.06.2015, 17:45 8
ну так это кусок какой-то от общей реализации. где все остальное от нее?
0
4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
01.06.2015, 17:46  [ТС] 9
Цитата Сообщение от Arcor Посмотреть сообщение
ну так это кусок какой-то от общей реализации. где все остальное от нее?
А зачем мне всё остальное? Публичный ключ у меня уже есть, получаю от сервера. Есть текст длиной 5-10 символов. Нужно используя ТОЛЬКО публичный ключ, который выслал мне сервер, зашифровать текст.
0
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.06.2015, 17:53 10
Цитата Сообщение от parka242 Посмотреть сообщение
А зачем мне всё остальное?


ну раз не надо.. то ждите еще пару лет. мож заработает и так...

Добавлено через 3 минуты
чтобы вам зашфровать/расшифровать, вам надо алгоритм шифрования сам. в дельфи его нетую дельфи не знает его.. нужно сперва найти наверно библиотеку/алгоритм под дельфи написанный. а потом уже это использовать в своей программе!!!
0
4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
01.06.2015, 17:53  [ТС] 11
Цитата Сообщение от Arcor Посмотреть сообщение
ну раз не надо.. то ждите еще пару лет. мож заработает и так...
А скажите мне, пожалуйста, что вы там ещё увидеть хотите? Генерацию ключа?
0
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.06.2015, 17:56 12
Цитата Сообщение от parka242 Посмотреть сообщение
А скажите мне, пожалуйста, что вы там ещё увидеть хотите? Генерацию ключа?
это как сказать: "Хочу программировать под Windows, только мне сам Windows не нужен вообше, но я хочу под Windows'сом писать" логики ровно нуль.. так же и у вас хотите шифровать/дешифровать, а без спец инструментов?? это как?
0
4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
01.06.2015, 17:58  [ТС] 13
Пожалуйста,

Delphi
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
unit Crypt_RSA;
 
interface
 
uses
  Windows, Classes, SysUtils, WCrypt2;
 
function RSAGenerateKeys(var PrivateKey, PublicKey: String): Boolean;
function RSAEncrypt(Source, Key: String): String;
function RSADecrypt(Source, Key: String): String;
 
implementation
 
function RSAGenerateKeys(var PrivateKey, PublicKey: String): Boolean;
const
  RSA1024BIT_KEY = $04000000;
 
var
  RSA: HCRYPTPROV;
  HKeyPair: HCRYPTKEY;
  Pair: TStringStream;
  buflen: DWORD;
 
  function SetKey(BlobDef: Cardinal; var Key: String): Boolean;
  begin
    Result := Bool(CryptExportKey(HKeyPair, 0, BlobDef, 0, nil, @buflen));
    if Result then
    begin
      Pair.SetSize(buflen);
      Result := Bool(CryptExportKey(HKeyPair, 0, BlobDef, 0, PByte(Pair.Memory), @buflen));
    end;
 
    Key := Pair.ReadString(buflen);
    Pair.Seek(0, soBeginning);
  end;
 
begin
  Pair := TStringStream.Create;
 
  Result := Bool(CryptAcquireContext(@RSA, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT));
  if Result then
    Result := Bool(CryptGenKey(RSA, AT_KEYEXCHANGE, RSA1024BIT_KEY or CRYPT_EXPORTABLE, @HKeyPair));
 
  if Result then
    Result := SetKey(PRIVATEKEYBLOB, PrivateKey);
  if Result then
    Result := SetKey(PUBLICKEYBLOB, PublicKey);
 
  CryptDestroyKey(HKeyPair);
  CryptReleaseContext(RSA, 0);
  FreeAndNil(Pair);
end;
 
function RSAEncrypt(Source, Key: String): String;
var
  KeyPair: TStringStream;
  RSA: HCRYPTPROV;
  HPair: HCRYPTKEY;
  DDataSize, EDataSize: DWORD;
 
begin
  Result := '';
  KeyPair := TStringStream.Create(Key);
  if CryptAcquireContext(@RSA, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) then
  try
    if CryptImportKey(RSA, PByte(KeyPair.Memory), KeyPair.Size, 0, 0, @HPair) then
    try
      EDataSize := SizeOf(Source);
      if CryptEncrypt(HPair, 0, true, 0, nil, @EDataSize, 0) then
      begin
        Result := Source;
        SetLength(Result, EDataSize);
        DDataSize := Length(Source) * SizeOf(Char);
        if not(CryptEncrypt(HPair, 0, True, 0, PByte(PChar(Result)), @DDataSize, EDataSize)) then
          Result := '';
      end;
    finally
      CryptDestroyKey(HPair);
    end;
  finally
  CryptReleaseContext(RSA, 0);
  end;
  FreeAndNil(KeyPair);
end;
 
function RSADecrypt(Source, Key: String): String;
var
  KeyPair: TStringStream;
  RSA: HCRYPTPROV;
  HPair: HCRYPTKEY;
  EDataSize: DWORD;
 
begin
  KeyPair := TStringStream.Create(Key);
  Result := '';
  if CryptAcquireContext(@RSA, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) then
  try
    if CryptImportKey(RSA, PByte(KeyPair.Memory), KeyPair.Size, 0, 0, @HPair) then
    try
      Result := Source;
      EDataSize := Length(Result);
      if not Bool(CryptDecrypt(HPair, 0, True, 0, PByte(PChar(Result)), @EDataSize)) then
        EDataSize := 0;
      SetLength(Result, EDataSize div SizeOf(Char));
    finally
      CryptDestroyKey(HPair);
    end;
  finally
    CryptReleaseContext(RSA, 0);
  end;
  FreeAndNil(KeyPair);
end;
 
end.
0
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.06.2015, 18:02 14
WCrypt2 - этот файл еще нужен...
0
4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
02.06.2015, 21:20  [ТС] 15
Цитата Сообщение от Arcor Посмотреть сообщение
WCrypt2 - этот файл еще нужен...
Есть ещё варианты? Можно с помощью fgint, openssl. Мне все равно, главное чтобы работало.

Добавлено через 10 минут
Вообще, я использовал RSACALC, который хорошо справлялся с задачей.

RSACALC:
Delphi
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
procedure TRSACalculator.Calculate(const Plaintext,Modulus: ANSIString;  var Ciphertext: ANSIString);
var i:integer;
begin
  i:=0;
  while busy do begin
    inc(i);
    if i>1000 then exit;
    sleep(50);
    Application.ProcessMessages;
  end;
  //
  Password.setAttribute('value',Plaintext,0);    
  ModulusE.setAttribute('value',Modulus,0);
  web.RunJS('Go();');
  Ciphertext:=CiphertextE.getAttribute('value',0);
end;
 
constructor TRSACalculator.Create(form: TForm);
begin
  busy:=true;
  p:=TPanel.Create(Form);
  p.Parent:=Form;
  web:=TWebBrowser.Create(p);
  web.Visible:=false;
  TWinControl(web).Parent:=p;
  p.Height:=0;
  p.Width:=0;
  web.OnDocumentComplete:=self.WebDocumentComplete;
  web.OnBeforeNavigate2:=self.WebNavigate2;
  web.Navigate(iniName);
 
end;
Delphi
1
2
RSA:=TRSACalculator.Create(form1);
RSA.Calculate(form1.sedit1.Text,authkey,text);
Но в потоке не используется

Добавлено через 42 минуты
Нужна помощь!

Добавлено через 1 минуту
Нужно выполнить симметричное шифрование

Добавлено через 47 минут
!!!HELP!!!

Добавлено через 1 час 26 минут
Кто-нибудь может помочь?

Добавлено через 24 минуты
Пожалуйста

Добавлено через 40 минут
По прежнему нужна помощь...

Добавлено через 15 часов 3 минуты
Помощь...

Добавлено через 57 минут
Попытался реализовать с помощью FGINT
Delphi
1
2
3
4
5
authkey = 'E5FF0DF37B5D42F1927685190B6F90B008AE805909A2D018F2B56A9C13227885A4B977649984647798168D550319C0CBD4F4A1CE81BB642C3EB2FADC7717A1D8CB87606D2554E0F30CA2395FF5C634854D97255B11A4DD2C2FA9ADDD10055F7911E7CFB9F6811E7BE20EC27BCE4B68DB7D6AE57BECF6224C6D3BD89B7C1CE5DBFF88BCC3F6E10EEF2903B1043BD2A4C3CDC29A455CB616CBF90D442F12F7880BF69AB1209C6B0DBC4FC87E7737936F587402D5A314F53A7E09B966F54E24C7FDD7391CE7174E2C22DFED33A2F1AC81B3693781D3276E9678005BC87A629DDA3934C702C7F8BA1E4527B81742AC5D2E7629DF324C00B56BAE67DDC00236E578CD';
kexp:='010001';
Base10StringToFGInt(authkey,authkeys);
Base10StringToFGInt(kexp,kexps);
rsaencrypt('радугавнебе', authkeys, kexps, passw);
Происходит ошибка при конвертировании: "Project1.exe raised exception class EConvertError with message "9CF9" is not a valid integer value"

Добавлено через 41 минуту
Хоть кто-нибудь!!!

Добавлено через 57 минут
Неужели помочь никто не может?

Добавлено через 24 минуты
До сих пор нужна эта ГРЕБАННАЯ помощь

Добавлено через 2 часа 10 минут
Опять поднимаю, нужна помощь

Добавлено через 19 минут
НУЖНА ПОМОЩЬ!!! ПОМОГИТЕ УЖЕ! Не одна найденная мною функция не работает с таким большим ключом

Добавлено через 2 часа 30 минут
ВВВЕРХХХХХХХХХХХХХХХ
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 21:20
Помогаю со студенческими работами здесь

Шифрование текста по алгоритму RSA
Добрый вечер. Для курсовой работы нужно написать программу на делфи, шифрующую текст с помощью...

RSA шифрование по публичному ключу
Пытаюсь авторизоваться в Steam. Раньше я использовал модуль "rsacalc" RSACALC: procedure...

Шифрование RSA: к строке добавляются три единицы
Всем Привет.Хочу шифровать через РСА,Исползую FGint компонент. но там почему то моего string - а...

RSA Шифрование на основе публичного ключа и экспоненты
Сегодня обгуглился уже... Как в делфях вообще реализовывается это шифрование?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru