Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 14

Шифрование: исправить приложенный код

26.04.2012, 22:07. Показов 801. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как заставить его работать, не могу не как понять =(
Visual Basic
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
Option Explicit
 
' ....----==== API Declarations ====----....
 
Private Declare Function CryptAcquireContext Lib "advapi32.dll" _
   Alias "CryptAcquireContextA" ( _
   ByRef phProv As Long, _
   ByVal pszContainer As String, _
   ByVal pszProvider As String, _
   ByVal dwProvType As Long, _
   ByVal dwFlags As Long) As Long
 
Private Declare Function CryptReleaseContext Lib "advapi32.dll" ( _
   ByVal hProv As Long, _
   ByVal dwFlags As Long) As Long
 
Private Declare Function CryptCreateHash Lib "advapi32.dll" ( _
   ByVal hProv As Long, _
   ByVal Algid As Long, _
   ByVal hKey As Long, _
   ByVal dwFlags As Long, _
   ByRef phHash As Long) As Long
 
Private Declare Function CryptDestroyHash Lib "advapi32.dll" ( _
   ByVal hHash As Long) As Long
 
Private Declare Function CryptHashData Lib "advapi32.dll" ( _
   ByVal hHash As Long, _
   pbData As Any, _
   ByVal dwDataLen As Long, _
   ByVal dwFlags As Long) As Long
 
Private Declare Function CryptDeriveKey Lib "advapi32.dll" ( _
   ByVal hProv As Long, _
   ByVal Algid As Long, _
   ByVal hBaseData As Long, _
   ByVal dwFlags As Long, _
   ByRef phKey As Long) As Long
 
Private Declare Function CryptDestroyKey Lib "advapi32.dll" ( _
   ByVal hKey As Long) As Long
 
Private Declare Function CryptEncrypt Lib "advapi32.dll" ( _
   ByVal hKey As Long, _
   ByVal hHash As Long, _
   ByVal Final As Long, _
   ByVal dwFlags As Long, _
   pbData As Any, _
   ByRef pdwDataLen As Long, _
   ByVal dwBufLen As Long) As Long
 
Private Declare Function CryptDecrypt Lib "advapi32.dll" ( _
   ByVal hKey As Long, _
   ByVal hHash As Long, _
   ByVal Final As Long, _
   ByVal dwFlags As Long, _
   pbData As Any, _
   ByRef pdwDataLen As Long) As Long
 
Private Declare Sub MoveMemory Lib "kernel32" _
   Alias "RtlMoveMemory" ( _
   dest As Any, _
   Src As Any, _
   ByVal Ln As Long)
 
Private Const PROV_RSA_FULL = 1
 
Private Const CRYPT_NEWKEYSET = &H8
 
Private Const ALG_CLASS_HASH = 32768
Private Const ALG_CLASS_DATA_ENCRYPT = 24576&
 
Private Const ALG_TYPE_ANY = 0
Private Const ALG_TYPE_BLOCK = 1536&
Private Const ALG_TYPE_STREAM = 2048&
 
Private Const ALG_SID_MD2 = 1
Private Const ALG_SID_MD4 = 2
Private Const ALG_SID_MD5 = 3
Private Const ALG_SID_SHA1 = 4
 
Private Const ALG_SID_DES = 1
Private Const ALG_SID_3DES = 3
Private Const ALG_SID_RC2 = 2
Private Const ALG_SID_RC4 = 1
 
Enum HashAlgorithm
   MD2 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2
   MD4 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4
   MD5 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5
   SHA1 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1
End Enum
 
Enum encAlgorithm
   DES = ALG_CLASS_DATA_ENCRYPT Or ALG_TYPE_BLOCK Or ALG_SID_DES
   [3DES] = ALG_CLASS_DATA_ENCRYPT Or ALG_TYPE_BLOCK Or ALG_SID_3DES
   RC2 = ALG_CLASS_DATA_ENCRYPT Or ALG_TYPE_BLOCK Or ALG_SID_RC2
   RC4 = ALG_CLASS_DATA_ENCRYPT Or ALG_TYPE_STREAM Or ALG_SID_RC4
End Enum
 
'---------------------------------------------------------------------------------------
' Procedure : EncryptData
' Purpose   : Encrypts a byte array.
'---------------------------------------------------------------------------------------
'
Public Function EncryptData( _
   data() As Byte, _
   ByVal password As String, _
   Optional ByVal HashAlgorithm As HashAlgorithm = MD5, _
   Optional ByVal encAlgorithm As encAlgorithm = RC4) As Byte()
   
   Dim lRes As Long
   Dim hProv As Long
   Dim hHash As Long
   Dim hKey As Long
   Dim lBufLen As Long
   Dim lDataLen As Long
   Dim abData() As Byte
 
   ' Get default provider context handle
   lRes = CryptAcquireContext(hProv, vbNullString, _
           vbNullString, PROV_RSA_FULL, 0)
   
   ' ····----==== Added 11/04/2003 ====----····
   If lRes = 0 And Err.LastDllError = &H80090016 Then
   
      ' There's no default keyset container!!!
      ' Get the provider context and create
      ' a default keyset container
      lRes = CryptAcquireContext(hProv, vbNullString, _
               vbNullString, PROV_RSA_FULL, CRYPT_NEWKEYSET)
   End If
   '          ····----========----····
   
   If lRes <> 0 Then
   
      ' Create a hash object
      lRes = CryptCreateHash(hProv, HashAlgorithm, 0, 0, hHash)
      
      If lRes <> 0 Then
         
         ' Hash the password
         lRes = CryptHashData(hHash, ByVal password, Len(password), 0)
         
         If lRes <> 0 Then
            
            ' Derive a key from the hash
            lRes = CryptDeriveKey(hProv, encAlgorithm, hHash, 0, hKey)
            
            If lRes <> 0 Then
            
               ' Calculate the array size
               lBufLen = UBound(data) - LBound(data) + 1
               lDataLen = lBufLen
               
               ' Get required buffer size
               lRes = CryptEncrypt(hKey, 0&, 1, 0, ByVal 0&, lBufLen, 0)
               
               If lRes <> 0 Then
                  
                  ' Initialize the buffer
                  If lBufLen < lDataLen Then lBufLen = lDataLen
                  ReDim abData(0 To lBufLen - 1)
                  MoveMemory abData(0), data(LBound(data)), lDataLen
                  
                  ' Encrypt the data
                  lRes = CryptEncrypt(hKey, 0&, 1, 0, abData(0), lBufLen, lDataLen)
                  
                  If lRes <> 0 Then
                  
                     ' Resize the array if the encrypted
                     ' size is <> than the data size
                     If lDataLen <> lBufLen Then
                        ReDim Preserve abData(0 To lBufLen - 1)
                     End If
                     
                     ' Return the encrypted data
                     EncryptData = abData
                  
                  End If
                  
               End If
 
            End If
            
            ' Destroy the key
            CryptDestroyKey hKey
            
         End If
         
         ' Destroy the hash
         CryptDestroyHash hHash
         
      End If
      
      ' Release the provider context
      CryptReleaseContext hProv, 0
   
   End If
 
   ' Raise an error if lRes = 0
   If lRes = 0 Then Err.Raise Err.LastDllError
 
End Function
 
'---------------------------------------------------------------------------------------
' Procedure : DecryptData
' Purpose   : Decrypts a byte array.
'---------------------------------------------------------------------------------------
'
Public Function DecryptData( _
   data() As Byte, _
   ByVal password As String, _
   Optional ByVal HashAlgorithm As HashAlgorithm = MD5, _
   Optional ByVal encAlgorithm As encAlgorithm = RC4) As Byte()
   
   Dim lRes As Long
   Dim hProv As Long
   Dim hHash As Long
   Dim hKey As Long
   Dim lBufLen As Long
   Dim abData() As Byte
 
   ' Get default provider context handle
   lRes = CryptAcquireContext(hProv, vbNullString, _
           vbNullString, PROV_RSA_FULL, 0)
   
   ' ····----==== Added 11/04/2003 ====----····
   If lRes = 0 And Err.LastDllError = &H80090016 Then
   
      ' There's no default keyset container!!!
      ' Get the provider context and create
      ' a default keyset container
      lRes = CryptAcquireContext(hProv, vbNullString, _
               vbNullString, PROV_RSA_FULL, CRYPT_NEWKEYSET)
   End If
   '          ····----========----····
 
   If lRes <> 0 Then
   
      ' Create a hash
      lRes = CryptCreateHash(hProv, HashAlgorithm, 0, 0, hHash)
      
      If lRes <> 0 Then
         
         ' Hash the password
         lRes = CryptHashData(hHash, ByVal password, Len(password), 0)
         
         If lRes <> 0 Then
            
            ' Derive a key from the hash
            lRes = CryptDeriveKey(hProv, encAlgorithm, hHash, 0, hKey)
            
            If lRes <> 0 Then
            
               ' Calculate the array size
               lBufLen = UBound(data) - LBound(data) + 1
               
               ' Initialize the buffer
               ReDim abData(0 To lBufLen - 1)
               MoveMemory abData(0), data(LBound(data)), lBufLen
                  
               ' Decrypt the data
               lRes = CryptDecrypt(hKey, 0&, 1, 0, abData(0), lBufLen)
                  
               If lRes <> 0 Then
                  ReDim Preserve abData(0 To lBufLen - 1)
                  
                  ' Return the encrypted data
                  DecryptData = abData
                  
               End If
                  
            End If
            
            ' Destroy the key
            CryptDestroyKey hKey
            
         End If
         
         ' Destroy the hash
         CryptDestroyHash hHash
         
      End If
      
      ' Release the provider context
      CryptReleaseContext hProv, 0
   
   End If
 
   ' Raise an error if lRes = 0
   If lRes = 0 Then Err.Raise Err.LastDllError
 
End Function
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2012, 22:07
Ответы с готовыми решениями:

Метод пузырьковой сортировки: верен ли приложенный код
Дано задание сортировка методом пузырька. Вот программа подскажите правильно ли она записанна. Спасибо Dim m(10) As Single Private...

Работа с ArcGIS 9.3, куда вставить приложенный код - в форму или модуль
здравствуйте, я работаю в ArcGIS 9.3, пытаюсь увеличить возможности ПО при помощи vb6. нужный мне код есть, только вот не могу понять, куда...

Шифрование методом квадрат Полибия (исправить ошибку)
Нужно исправить ошибку в коде для реализации шифрования методом квадрата полибия. Module Module1 Dim P(5, 5) As String Dim a ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2012, 22:07
Помогаю со студенческими работами здесь

Пишу чат. Как исправить приложенный код
Здраствуйте пользователи cyberforum програмированием я начал заниматься недавно и пока что делаю простенькие программы,но тут появилась...

Шифрование методом перестановки, исправить код
Здравствуйте. У меня есть задание написать шифр перестановками. То есть например мы вводим &quot;ключ&quot;- &quot;банан&quot;. Из него...

Шифрование Эль-Гамаля: исправить код расшифровки
Написал функцию шифрования и расшифрования. Но расшифровывает не правильно, не могли бы помочь: // p, g, y - открытые ключи Эль-Гамаля ...

Что делает приложенный код
Всем привет!) Скажите пожалуйста, что реализует данный код int min = 32000; int max = 0; int mind = 0; ...

Что делает приложенный код
Ребят! Нужна помощь :) Никак не могу понять, для чего нужна программа. Знакомый дал код и сказал, чтобы я ему сказал, чтобы я ему...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru