Вверх ↑
Этот топик читают: Гость
Ответов: 146
Рейтинг: 1
#1: 2025-08-23 20:58:57 ЛС | профиль | цитата
Где этот компонент хранит константы для SHA-256 ? Смотрел код компонента там их нет.
карма: 1

0
Ответов: 948
Рейтинг: 201
#2: 2025-08-23 22:07:01 ЛС | профиль | цитата
Andrej77rv писал(а):
Где этот компонент хранит константы для SHA-256 ?

Смотри здесь
\Elements\delphi\code\SHA.pas
карма: 19

0
Ответов: 2456
Рейтинг: 695
#3: 2025-08-23 23:30:02 ЛС | профиль | цитата
Не совсем понятно о каких константах речь. Но код одним файлом компонента не ограничивается.
-Выделить компонент нажать Ctrl+F, откроется код компонента.
-В самом начале есть строка uses где перечислены используемые файлы
-Можно открыть и эти файлы в HiAsm. К примеру ткнуть по CryptoAPI (Ctrl + Enter), откроется CryptoAPI.pas
-В нем в uses есть SHA, открыть SHA.pas

Редактировалось 5 раз(а), последний 2025-08-24 09:58:08
карма: 11

0
Ответов: 146
Рейтинг: 1
#4: 2025-08-24 09:02:33 ЛС | профиль | цитата
Подскажите как суммируется по модулю 2 в конце хеш? Не могу понять всё облазил уже. Там 64 раунда и каждый раунд суммируется с предыдущим? Или первый с последним? Или эти последние 8 блоков это просто сложение 0+1+2+3 и т.д.?


карма: 1

0
Ответов: 2456
Рейтинг: 695
#5: 2025-08-24 23:30:10 ЛС | профиль | цитата
Andrej77rv, вот для интереса посмотрел что можно найти по теме и полно статей где "разжеванно" все о SHA256.
К примеру Реализация алгоритма SHA-256
И даже наглядно показано: https://sha256algorithm.com/
Что вам мешает разобраться не понятно
карма: 11

0
Ответов: 146
Рейтинг: 1
#6: 2025-08-25 09:44:32 ЛС | профиль | цитата
sla8a писал(а):
Andrej77rv, вот для интереса посмотрел что можно найти по теме и полно статей где "разжеванно" все о SHA256.
К примеру Реализация алгоритма SHA-256
И даже наглядно показано: https://sha256algorithm.com/
Что вам мешает разобраться не понятно

Я читал первую ссылку. Там объясняют математическим языком. Вопрос в последних 8 блоках. Я не могу понять что они делают. Там пишут что надо суммировать по модулю 2 раунды 63 и 64. Но я смотрел в поисковике, там пишут что раунды вообще не суммируются. ИИ тоже пишет что раунды в SHA-256 вообще не суммируются. В этом и весь вопрос.
карма: 1

0
Ответов: 2456
Рейтинг: 695
#7: 2025-08-25 11:21:58 ЛС | профиль | цитата
Andrej77rv, а можешь прям вот пальцем показать где это:
Andrej77rv писал(а):
Там пишут что надо суммировать по модулю 2 раунды 63 и 64

в это статье: Реализация алгоритма SHA-256
Andrej77rv писал(а):
Вопрос в последних 8 блоках.
О каких "последних" 8 блоках речь?
Andrej77rv писал(а):
Там объясняют математическим языком.
А каким нужно?
карма: 11

0
Ответов: 146
Рейтинг: 1
#8: 2025-08-25 11:46:17 ЛС | профиль | цитата
sla8a писал(а):
О каких "последних" 8 блоках речь?

Красной стрелкой указал



--- Добавлено в 2025-08-25 11:56:33

sla8a писал(а):
а можешь прям вот пальцем показать где это:

С сайта по первой ссылке:

"Значения, которые были получены на последней итерации цикла, складываются со старым и образуют новый вектор инициализации, который станет стартовым для следующего блока.

h0+=a, h1+=b, h2+=c, h3+=d, h4+=e, h5+=f, h6+=g, h7+=h "

Редактировалось 2 раз(а), последний 2025-08-25 11:56:59
карма: 1

0
Ответов: 2456
Рейтинг: 695
#9: 2025-08-25 12:47:32 ЛС | профиль | цитата
Andrej77rv, складывается впечатление что это троллинг (без обид, но есть подозрение).
Andrej77rv писал(а):
Красной стрелкой указал
И что указано стрелкой? Где там именно "последние" 8 блоков? Там только 8 блоков.
Andrej77rv писал(а):
С сайта по первой ссылке:

И где в сайте говориться о:
Andrej77rv писал(а):
Там пишут что надо суммировать по модулю 2 раунды 63 и 64
?

А вот это:
Andrej77rv писал(а):
Значения, которые были получены на последней итерации цикла, складываются со старым и образуют новый вектор инициализации, который станет стартовым для следующего блока.

h0+=a, h1+=b, h2+=c, h3+=d, h4+=e, h5+=f, h6+=g, h7+=h

Вам еще в другой теме tig-rrr ответом ИИ выложил (шаг 2):

Добавляем результат к "главным специям":
После 64 раундов мы берем наши изменившиеся рабочие переменные a-h и прибавляем их к изначальным значениям h0-h7.

h0 = h0 + a

h1 = h1 + b

...

h7 = h7 + h


И как видно ответ ИИ никак не противоречит статье на хабре.

Надеюсь вы знаете что:
h0+=a
, тоже самое что:
h0 = h0 + a

Редактировалось 1 раз(а), последний 2025-08-25 12:48:27
карма: 11

0
Ответов: 146
Рейтинг: 1
#10: 2025-08-25 12:55:34 ЛС | профиль | цитата
sla8a писал(а):
И где в сайте говориться о

А по вашему "раунд" и "интерация цикла" это не одно и тоже что-ли?

--- Добавлено в 2025-08-25 12:58:08

sla8a писал(а):
И что указано стрелкой? Где там именно "последние" 8 блоков? Там только 8 блоков

Там ещё есть 6 сумматоров. Последние 8 тоже сумматоры.

Редактировалось 3 раз(а), последний 2025-08-25 12:58:08
карма: 1

0
Ответов: 2456
Рейтинг: 695
#11: 2025-08-25 13:19:45 ЛС | профиль | цитата
Вот тут в статье дается ответ на твои вопросы.

Значения, которые были получены на последней итерации цикла, складываются со старым и образуют новый вектор инициализации, который станет стартовым для следующего блока.

h0+=a, h1+=b, h2+=c, h3+=d, h4+=e, h5+=f, h6+=g, h7+=h

Если данный блок был последним, то сумма элементов этого вектора станет итоговым хэшем сообщения

h0+ h1+ h2+ h3+ h4+ h5+ h6+ h7=hash_sha-256
Что тут не понятно?
карма: 11

0
Ответов: 146
Рейтинг: 1
#12: 2025-08-25 13:33:18 ЛС | профиль | цитата
sla8a писал(а):
Что тут не понятно?

Ну теперь вроде понятно. Я спросил ИИ складываются инерции цикла в SHA-256 пишет что да. А когда спрашивал про раунды пишет что нет. Хотя это одно и тоже.

Редактировалось 3 раз(а), последний 2025-08-25 13:35:27
карма: 1

0
Ответов: 2456
Рейтинг: 695
#13: 2025-08-25 13:56:49 ЛС | профиль | цитата
Так вот в этом разборе habr (ссылка выложенная тобой в другой теме) вообще разжевано хорошенько.
Если правильно понял то вопросы твои были о шаге 7 и 8.

Вот тебе еще для наглядности шаг 1,2 и шаг 8 на схеме:
Add(MainForm,2953706,28,413)
{
Width=808
Height=674
link(onCreate,16235641:doEvent1,[])
}
Add(FormatStr,7548802,308,1057)
{
DataCount=8
Mask="%1%2%3%4%5%6%7%8"
link(onFString,10307586:doModify,[])
link(Str1,3583816:getVar,[])
link(Str2,2275682:getVar,[])
link(Str3,9181256:getVar,[])
link(Str4,10510521:getVar,[])
link(Str5,7520436:getVar,[])
link(Str6,8945005:getVar,[])
link(Str7,5492013:getVar,[])
link(Str8,14159012:getVar,[])
}
Add(Memory,6909465,182,42)
{
Default=String(6a09e667)
AddHint(-21,-22,73,13,Default)
}
Add(LineBreakEx,9461891,182,84)
{
Caption="cnst0"
Type=3
link(_Data,6909465:Value,[])
}
Add(Memory,15274853,266,42)
{
Default=String(bb67ae85)
AddHint(-21,-22,73,13,Default)
}
Add(LineBreakEx,5555338,266,84)
{
Caption="cnst1"
Type=3
link(_Data,15274853:Value,[])
}
Add(Memory,8069386,350,42)
{
Default=String(3c6ef372)
AddHint(-21,-22,70,13,Default)
}
Add(LineBreakEx,9666909,350,84)
{
Caption="cnst2"
Type=3
link(_Data,8069386:Value,[])
}
Add(Memory,10062881,434,42)
{
Default=String(a54ff53a)
AddHint(-21,-22,67,13,Default)
}
Add(LineBreakEx,13311912,434,84)
{
Caption="cnst3"
Type=3
link(_Data,10062881:Value,[])
}
Add(Memory,1353167,518,42)
{
Default=String(510e527f)
AddHint(-21,-22,70,13,Default)
}
Add(LineBreakEx,1084198,518,84)
{
Caption="cnst4"
Type=3
link(_Data,1353167:Value,[])
}
Add(Memory,12433086,602,42)
{
Default=String(9b05688c)
AddHint(-21,-22,73,13,Default)
}
Add(LineBreakEx,4035879,602,84)
{
Caption="cnst5"
Type=3
link(_Data,12433086:Value,[])
}
Add(Memory,4117371,686,42)
{
Default=String(1f83d9ab)
AddHint(-21,-22,70,13,Default)
}
Add(LineBreakEx,11115119,686,84)
{
Caption="cnst6"
Type=3
link(_Data,4117371:Value,[])
}
Add(Memory,4037079,770,42)
{
Default=String(5be0cd19)
AddHint(-21,-22,73,13,Default)
}
Add(LineBreakEx,8173076,770,84)
{
Caption="cnst7"
Type=3
link(_Data,4037079:Value,[])
}
Add(LineBreakEx,3583816,308,917)
{
Caption="h0"
Type=2
}
Add(LineBreakEx,2275682,315,931)
{
Caption="h1"
Type=2
}
Add(LineBreakEx,9181256,322,945)
{
Caption="h2"
Type=2
}
Add(LineBreakEx,10510521,329,959)
{
Caption="h3"
Type=2
}
Add(LineBreakEx,7520436,336,973)
{
Caption="h4"
Type=2
}
Add(LineBreakEx,8945005,343,987)
{
Caption="h5"
Type=2
}
Add(LineBreakEx,5492013,350,1001)
{
Caption="h6"
Type=2
}
Add(LineBreakEx,14159012,357,1015)
{
Caption="h7"
Type=2
}
Add(Memory,14978426,182,133)
{
}
Add(LineBreakEx,6779707,182,175)
{
Caption="h0"
Type=3
link(_Data,14978426:Value,[])
}
Add(Memory,3942371,266,133)
{
}
Add(LineBreakEx,11818656,266,175)
{
Caption="h1"
Type=3
link(_Data,3942371:Value,[])
}
Add(Memory,9983382,350,133)
{
}
Add(LineBreakEx,14338744,350,175)
{
Caption="h2"
Type=3
link(_Data,9983382:Value,[])
}
Add(Memory,14862341,434,133)
{
}
Add(LineBreakEx,7720121,434,175)
{
Caption="h3"
Type=3
link(_Data,14862341:Value,[])
}
Add(Memory,7278404,518,133)
{
}
Add(LineBreakEx,1983248,518,175)
{
Caption="h4"
Type=3
link(_Data,7278404:Value,[])
}
Add(Memory,6625647,602,133)
{
}
Add(LineBreakEx,2947644,602,175)
{
Caption="h5"
Type=3
link(_Data,6625647:Value,[])
}
Add(Memory,15639297,686,133)
{
}
Add(LineBreakEx,9393840,686,175)
{
Caption="h6"
Type=3
link(_Data,15639297:Value,[])
}
Add(Memory,1454141,770,133)
{
}
Add(LineBreakEx,12039092,770,175)
{
Caption="h7"
Type=3
link(_Data,1454141:Value,[])
}
Add(LineBreakEx,6580104,140,133)
{
Caption="h0"
Type=1
link(OnEvent,14978426:doValue,[])
}
Add(LineBreakEx,4826947,224,133)
{
Caption="h1"
Type=1
link(OnEvent,3942371:doValue,[])
}
Add(LineBreakEx,3990732,308,133)
{
Caption="h2"
Type=1
link(OnEvent,9983382:doValue,[])
}
Add(LineBreakEx,15180525,392,133)
{
Caption="h3"
Type=1
link(OnEvent,14862341:doValue,[])
}
Add(LineBreakEx,14015957,476,133)
{
Caption="h4"
Type=1
link(OnEvent,7278404:doValue,[])
}
Add(LineBreakEx,13281717,560,133)
{
Caption="h5"
Type=1
link(OnEvent,6625647:doValue,[])
}
Add(LineBreakEx,16134071,644,133)
{
Caption="h6"
Type=1
link(OnEvent,15639297:doValue,[])
}
Add(LineBreakEx,6165235,728,133)
{
Caption="h7"
Type=1
link(OnEvent,1454141:doValue,[])
}
Add(For,8105253,224,784)
{
End=63
link(onEvent,8264828:doWork,[])
link(onStop,7548802:doString,[(285,797)(285,1063)])
}
Add(LineBreakEx,9946586,259,259)
{
Caption="h0"
}
Add(LineBreakEx,15268883,259,322)
{
Caption="h1"
}
Add(LineBreakEx,12771059,259,385)
{
Caption="h2"
}
Add(LineBreakEx,11042855,266,448)
{
Caption="h3"
}
Add(LineBreakEx,3077201,259,511)
{
Caption="h4"
}
Add(LineBreakEx,7163863,259,574)
{
Caption="h5"
}
Add(LineBreakEx,1071867,259,637)
{
Caption="h6"
}
Add(LineBreakEx,4188735,266,700)
{
Caption="h7"
}
Add(Hub,16235641,91,427)
{
OutCount=9
link(onEvent1,12063037:doData,[(144,433)(144,265)])
link(onEvent2,9292680:doData,[(153,440)(153,328)])
link(onEvent3,13085906:doData,[(161,447)(161,391)])
link(onEvent4,11311209:doData,[])
link(onEvent5,12409871:doData,[(161,461)(161,517)])
link(onEvent6,2805457:doData,[(149,468)(149,580)])
link(onEvent7,11681583:doData,[(140,475)(140,643)])
link(onEvent8,48618:doData,[(126,482)(126,706)])
link(onEvent9,8105253:doFor,[(112,489)(112,790)])
}
Add(LineBreakEx,11175181,217,231)
{
Caption="cnst0"
Type=2
}
Add(LineBreakEx,12755769,217,294)
{
Caption="cnst1"
Type=2
}
Add(LineBreakEx,13453926,217,357)
{
Caption="cnst2"
Type=2
}
Add(LineBreakEx,15216621,217,420)
{
Caption="cnst3"
Type=2
}
Add(LineBreakEx,6513601,217,483)
{
Caption="cnst4"
Type=2
}
Add(LineBreakEx,3002345,217,546)
{
Caption="cnst5"
Type=2
}
Add(LineBreakEx,5507529,217,609)
{
Caption="cnst6"
Type=2
}
Add(LineBreakEx,11275401,217,672)
{
Caption="cnst7"
Type=2
}
Add(DoData,12063037,217,259)
{
link(onEventData,9946586:doWork,[])
link(Data,11175181:getVar,[])
}
Add(DoData,9292680,217,322)
{
link(onEventData,15268883:doWork,[])
link(Data,12755769:getVar,[])
}
Add(DoData,13085906,217,385)
{
link(onEventData,12771059:doWork,[])
link(Data,13453926:getVar,[])
}
Add(DoData,11311209,217,448)
{
link(onEventData,11042855:doWork,[])
link(Data,15216621:getVar,[])
}
Add(DoData,12409871,217,511)
{
link(onEventData,3077201:doWork,[])
link(Data,6513601:getVar,[])
}
Add(DoData,2805457,217,574)
{
link(onEventData,7163863:doWork,[])
link(Data,3002345:getVar,[])
}
Add(DoData,11681583,217,637)
{
link(onEventData,1071867:doWork,[])
link(Data,5507529:getVar,[])
}
Add(DoData,48618,217,700)
{
link(onEventData,4188735:doWork,[])
link(Data,11275401:getVar,[])
}
Add(StrCase,10307586,392,1057)
{
Type=1
link(onModify,4325323:doEvent1,[])
}
Add(Label,2890944,602,1057)
{
Width=792
Height=24
Align=2
Font=[MS Sans Serif,12,0,0,1]
}
Add(Hub,4325323,434,1057)
{
link(onEvent1,2890944:doText,[])
link(onEvent2,13958802:doLength,[(455,1070)(455,1126)])
}
Add(Label,6383526,602,1120)
{
Width=792
Height=24
Align=2
Font=[MS Sans Serif,12,0,0,1]
}
Add(Length,13958802,476,1120)
{
link(onLength,6966483:doString,[])
}
Add(FormatStr,6966483,518,1120)
{
Mask="Длинна строки %1 символа"
link(onFString,6383526:doText,[])
}
Add(LineBreakEx,8264828,336,784)
{
Caption="next steps"
}
Но схему так не делай это только для наглядности. Лучше использовать массив а не такое безобразие из множеств Memory.

Редактировалось 1 раз(а), последний 2025-08-25 13:57:15
карма: 11

0
Ответов: 146
Рейтинг: 1
#14: 2025-08-25 15:24:30 ЛС | профиль | цитата
sla8a писал(а):
Вот тебе еще для наглядности шаг 1,2 и шаг 8 на схеме:

Да понятно спасибо. Просто почему возник вопрос меня ещё вот эта схема с толку сбила. Здесь на выходе не указаны сумматоры.


карма: 1

0
Ответов: 146
Рейтинг: 1
#15: 2025-08-25 18:06:54 ЛС | профиль | цитата
Подскажите ещё почему не получается конвертировать Hex в Bin?



Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Width=730
Height=350
}
Add(Convertor,2191574,560,161)
{
Mode=5
Digits=32
link(onResult,9540686:doConvert,[])
}
Add(Convertor,9540686,630,161)
{
Mode=8
Digits=32
link(onResult,4205618:doText,[])
}
Add(DoData,10992060,448,161)
{
link(onEventData,2191574:doConvert,[])
link(Data,12221644:Text,[])
}
Add(Button,13119710,329,161)
{
Left=25
Top=150
link(onClick,10992060:doData,[])
}
Add(Edit,4205618,735,161)
{
Left=320
Top=150
Width=335
Text=""
}
Add(Edit,12221644,448,98)
{
Left=115
Top=150
Width=180
Text="0x428a2f98"
}


карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)