Страница: 1 |
Страница: 1 |
Вопрос: Знаю что просто, но сделать несмогу... помогите =)
Добавлено: 19.12.07 12:35
Автор вопроса: __Pavel__ | Web-сайт:
Значит так... мне надо закодировать информацию и записать ее в файл, я скачал код кодировки и раскодировки(это я сам сделаю по подобию). Все бы хорошо, да вот беда мне нужно записать массив Text(7, 200) а т.к. я еще новичек, то в этом коде ниче понять не могу!вот код кодировки... там все расписано:
Dim IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Вектор инициализации
Private Sub Encrypt ()
'Создаём экземпляр класса RijndaelManaged
Dim RMCrypto As New Security.Cryptography.RijndaelManaged
'Создаём FileStream, туда будет записана зашифрованная информация
Dim fs As New IO.FileStream("C:\crypted.dat", IO.FileMode.Create)
'Создаём CryptoStream
Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateEncryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Write)
'Создаём StreamWriter для записи данных в CryptoStream
Dim SWriter As New IO.StreamWriter(CryptStream)
'Пишем что-нибудь в CryptoStream
SWriter.WriteLine("Эта информация зашифрована симметричным алгоритмом Rijndael!")
'Закрываем все объекты
SWriter.Close()
fs.Close()
CryptStream.Close()
End Sub
все дело в том что мне нужно записать этот массив в файл по следующему коду, но при этом чтобы он уже был закодирован:
FileOpen(1, c:\Text.txt", OpenMode.Output)
PrintLine(1, Z)
For NZ = 1 To 200
PrintLine(1, T(1, NZ))
PrintLine(1, T(2, NZ))
PrintLine(1, T(3, NZ))
PrintLine(1, T(4, NZ))
PrintLine(1, T(5, NZ))
PrintLine(1, T(6, NZ))
PrintLine(1, T(7, NZ))
Next
FileClose(1)
Почему именно поэтому коду? Да потомучто я другой непойму! =)
Вот код разкодировки (если вдруг еще и напишете код чтения, чему я был бы очень рад =))
'Создаём экземпляр класса RijndaelManaged
Dim RMCrypto As New Security.Cryptography.RijndaelManaged
'Создаём FileStream, оттуда будем читать зашифрованную информацию
Dim fs As New IO.FileStream("C:\crypted.dat", IO.FileMode.Open)
'Создаём CryptoStream
Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateDecryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Read)
'Создаём StreamReader для чтения данных из CryptoStream
Dim SReader As New IO.StreamReader(CryptStream)
'Читаем расшифрованную информацию из CryptoStream и пишем её в консоль
Console.WriteLine(SReader.ReadToEnd())
'Закрываем все объекты
SReader.Close()
fs.Close()
CryptStream.Close()
End Sub
Заранее всем кто попытается помочь БОЛЬШОЕ спасибо!
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #1
Добавлено: 19.12.07 12:39
Если нужна дополнительная информация пишите)!
Номер ответа: 2
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #2
Добавлено: 19.12.07 22:11
Извините за неправильно поставленный вопрос Вообщем мне нужен алгоритм шифрования и расшифрования массива Text(7, 200) любой мощьности.
Заранее спасибо!
Номер ответа: 3
Автор ответа:
BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #3
Добавлено: 20.12.07 02:46
А, зачем кодировать?
Если правда не секрет.
Номер ответа: 4
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #4
Добавлено: 20.12.07 02:48
я програмку для проведения тестов делаю.... так вто что бы не подсмотрели в текстовом файле ответы
Номер ответа: 5
Автор ответа:
BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #5
Добавлено: 20.12.07 05:22
Прсмотри пример и на его основании записывай и читай. В переменную ОВ можешь передавать массив, или переюбьяви её под свой тип. Вообщем здесь ничего сложного.
Код кодировки немного подправь и будет тебе счастье.
Да, если в массиве данные типа интегер и если ОВ переобьявишь как интегер, то я думаю, что в файле никто ничего не поймет и без кодировки.
Public Class Form1
Private txt1 As TextBox = New TextBox
Private txt2 As TextBox = New TextBox
Private btnSave As Button = New Button
Friend btnOpen As Button = New Button
Private fName As String = ""
Private OB As Object
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.fName = Create_Path("My New File"
Me.txt1.Location = New System.Drawing.Point(21, 23)
Me.txt1.Name = "TextBox1"
Me.txt1.Size = New System.Drawing.Size(710, 20)
Me.txt1.Text = "This Text Will Be Saved By Below Path"
Me.txt2.Location = New System.Drawing.Point(21, 49)
Me.txt2.Name = "TextBox2"
Me.txt2.Text = Me.fName
Me.txt2.Size = New System.Drawing.Size(710, 20)
Me.txt2.TabIndex = 3
Me.btnSave.Location = New System.Drawing.Point(278, 75)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 1
Me.btnSave.Text = "Save"
Me.btnSave.UseVisualStyleBackColor = True
Me.btnOpen.Location = New System.Drawing.Point(359, 75)
Me.btnOpen.Name = "btnOpen"
Me.btnOpen.Size = New System.Drawing.Size(75, 23)
Me.btnOpen.TabIndex = 2
Me.btnOpen.Text = "Open"
Me.btnOpen.UseVisualStyleBackColor = True
Me.Controls.Add(Me.txt1)
Me.Controls.Add(Me.txt2)
Me.Controls.Add(Me.btnOpen)
Me.Controls.Add(Me.btnSave)
AddHandler btnSave.Click, AddressOf btnSave_Click
AddHandler btnOpen.Click, AddressOf btnOpen_Click
End Sub
Public Function Open(ByVal fileName As String, ByRef Obj As Object) As Object
Dim FS As New FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
Dim BF As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Obj = Nothing
Obj = BF.Deserialize(FS)
FS.Close()
Return Obj
End Function
Public Sub Save(ByVal fileName As String, ByVal Obj As Object)
Dim FS As New FileStream(fileName, FileMode.OpenOrCreate)
Dim BF As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
BF.Serialize(FS, Obj)
FS.Flush()
FS.Close()
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
OB = Me.txt1.Text
Me.Save(fName, OB)
Me.txt1.Text = ""
End Sub
Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Me.Open(fName, OB)
Me.txt1.Text = OB.ToString
End Sub
Public Function Create_Path(ByVal FileName As String) As String
Return Path.Combine(Application.StartupPath, FileName)
End Function
End Class
Пользуйся поиском по форуму.
Культурные люди, к таким же культурным так не обращаються.
Номер ответа: 6
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #6
Добавлено: 20.12.07 13:59
Извиняюсь за "грубость"
Большое спасибо за помощь!
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 20.12.07 14:57
Какой смысл прошивать ключ в код программы?
Тогда б уже и ключ от дома на двери повесил!
Номер ответа: 8
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #8
Добавлено: 20.12.07 15:00
ты про что?
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 20.12.07 15:50
про птичег
Номер ответа: 10
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #10
Добавлено: 25.12.07 10:39
спокуха, Brand имел в виду, что ключи к тестам не обязательно хранить внутри проги. Гораздо умнее хранить их в зашифрованном виде внутри файла.
Номер ответа: 11
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #11
Добавлено: 25.12.07 10:42
Сключи с файла только во время проверки и держи их в пямяти проги мин. время, так как всякие артманей могу сделать свое дело в этот момент. Следовательно, шифрование и дешифрование должно быть быстрым.
Номер ответа: 12
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #12
Добавлено: 02.01.08 04:48
я не думаю, что кто нить на уроке будет ломать мою прогу
Номер ответа: 13
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #13
Добавлено: 02.01.08 22:24
На вот тебе примерчик посложнее, преподу покажешь, сразу "отлично" поставит
у меня там мессаги в эксепшнах все на итальянском, но думаю проблем не будет, замени на "ОШЫПКО"
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Imports Microsoft.VisualBasic
Public Class DPAPI
<llImport("crypt32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function CryptProtectData _
  _
ByRef pPlainText As DATA_BLOB, _
ByVal szDescription As String, _
ByRef pEntropy As DATA_BLOB, _
ByVal pReserved As IntPtr, _
ByRef pPrompt As CRYPTPROTECT_PROMPTSTRUCT, _
ByVal dwFlags As Integer, _
ByRef pCipherText As DATA_BLOB _
  As Boolean
End Function
<llImport("crypt32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function CryptUnprotectData _
  _
ByRef pCipherText As DATA_BLOB, _
ByRef pszDescription As String, _
ByRef pEntropy As DATA_BLOB, _
ByVal pReserved As IntPtr, _
ByRef pPrompt As CRYPTPROTECT_PROMPTSTRUCT, _
ByVal dwFlags As Integer, _
ByRef pPlainText As DATA_BLOB _
  As Boolean
End Function
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Friend Structure DATA_BLOB
Public cbData As Integer
Public pbData As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Friend Structure CRYPTPROTECT_PROMPTSTRUCT
Public cbSize As Integer
Public dwPromptFlags As Integer
Public hwndApp As IntPtr
Public szPrompt As String
End Structure
Private Const CRYPTPROTECT_UI_FORBIDDEN As Integer = 1
Private Const CRYPTPROTECT_LOCAL_MACHINE As Integer = 4
Private Shared Sub InitPrompt _
  _
ByRef ps As CRYPTPROTECT_PROMPTSTRUCT _
 
ps.cbSize = Marshal.SizeOf(GetType(CRYPTPROTECT_PROMPTSTRUCT))
ps.dwPromptFlags = 0
ps.hwndApp = IntPtr.Zero
ps.szPrompt = Nothing
End Sub
Private Shared Sub InitBLOB _
  _
ByVal data As Byte(), _
ByRef blob As DATA_BLOB _
 
If data Is Nothing Then
data = New Byte(0) {}
End If
blob.pbData = Marshal.AllocHGlobal(data.Length)
If blob.pbData.Equals(IntPtr.Zero) Then
Throw New Exception( _
"Impossibile allocare memoria per struttura BLOB"
End If
blob.cbData = data.Length
Marshal.Copy(data, 0, blob.pbData, data.Length)
End Sub
Public Enum KeyType
UserKey = 1
MachineKey
End Enum
Private Shared defaultKeyType As KeyType = KeyType.UserKey
Public Shared Function Encrypt _
  _
ByVal plainText As String _
  As String
Return Encrypt(defaultKeyType, plainText, String.Empty, String.Empty)
End Function
Public Shared Function Encrypt _
  _
ByVal keyType As KeyType, _
ByVal plainText As String _
  As String
Return Encrypt(keyType, plainText, String.Empty, String.Empty)
End Function
Public Shared Function Encrypt _
  _
ByVal keyType As KeyType, _
ByVal plainText As String, _
ByVal entropy As String _
  As String
Return Encrypt(keyType, plainText, entropy, String.Empty)
End Function
Public Shared Function Encrypt _
  _
ByVal keyType As KeyType, _
ByVal plainText As String, _
ByVal entropy As String, _
ByVal description As String _
  As String
If plainText Is Nothing Then
plainText = String.Empty
End If
If entropy Is Nothing Then
entropy = String.Empty
End If
Return Convert.ToBase64String( _
Encrypt(keyType, _
Encoding.UTF8.GetBytes(plainText), _
Encoding.UTF8.GetBytes(entropy), _
description))
End Function
Public Shared Function Encrypt _
  _
ByVal keyType As KeyType, _
ByVal plainTextBytes As Byte(), _
ByVal entropyBytes As Byte(), _
ByVal description As String _
  As Byte()
If plainTextBytes Is Nothing Then
plainTextBytes = New Byte(0) {}
End If
If entropyBytes Is Nothing Then
entropyBytes = New Byte(0) {}
End If
If description Is Nothing Then
description = String.Empty
End If
Dim plainTextBlob As DATA_BLOB = New DATA_BLOB
Dim cipherTextBlob As DATA_BLOB = New DATA_BLOB
Dim entropyBlob As DATA_BLOB = New DATA_BLOB
Dim prompt As _
CRYPTPROTECT_PROMPTSTRUCT = New CRYPTPROTECT_PROMPTSTRUCT
InitPrompt(prompt)
Try
Try
InitBLOB(plainTextBytes, plainTextBlob)
Catch ex As Exception
Throw New Exception("Impossibile inizializzare BLOB del testo.", ex)
End Try
Try
InitBLOB(entropyBytes, entropyBlob)
Catch ex As Exception
Throw New Exception("Impossibile inizializzare BLOB della entropia.", ex)
End Try
Dim flags As Integer = CRYPTPROTECT_UI_FORBIDDEN
If keyType = KeyType.MachineKey Then
flags = flags Or (CRYPTPROTECT_LOCAL_MACHINE)
End If
Dim success As Boolean = CryptProtectData( _
plainTextBlob, _
description, _
entropyBlob, _
IntPtr.Zero, _
prompt, _
flags, _
cipherTextBlob)
If Not success Then
Dim errCode As Integer = Marshal.GetLastWin32Error()
Throw New Exception("Errore CryptProtectData", _
New Win32Exception(errCode))
End If
Dim cipherTextBytes(cipherTextBlob.cbData) As Byte
Marshal.Copy(cipherTextBlob.pbData, cipherTextBytes, 0, _
cipherTextBlob.cbData)
Return cipherTextBytes
Catch ex As Exception
Throw New Exception("Impossibile cryptare dati", ex)
Finally
If Not (plainTextBlob.pbData.Equals(IntPtr.Zero)) Then
Marshal.FreeHGlobal(plainTextBlob.pbData)
End If
If Not (cipherTextBlob.pbData.Equals(IntPtr.Zero)) Then
Marshal.FreeHGlobal(cipherTextBlob.pbData)
End If
If Not (entropyBlob.pbData.Equals(IntPtr.Zero)) Then
Marshal.FreeHGlobal(entropyBlob.pbData)
End If
End Try
End Function
Public Shared Function Decrypt _
  _
ByVal cipherText As String _
  As String
Dim description As String
Return Decrypt(cipherText, String.Empty, description)
End Function
Public Shared Function Decrypt _
  _
ByVal cipherText As String, _
ByRef description As String _
  As String
Return Decrypt(cipherText, String.Empty, description)
End Function
Public Shared Function Decrypt _
  _
ByVal cipherText As String, _
ByVal entropy As String, _
ByRef description As String _
  As String
If entropy Is Nothing Then
entropy = String.Empty
End If
Return Encoding.UTF8.GetString( _
 ecrypt(Convert.FromBase64String(cipherText), _
Encoding.UTF8.GetBytes(entropy), description))
End Function
Public Shared Function Decrypt _
  _
ByVal cipherTextBytes As Byte(), _
ByVal entropyBytes As Byte(), _
ByRef description As String _
  As Byte()
Dim plainTextBlob As DATA_BLOB = New DATA_BLOB
Dim cipherTextBlob As DATA_BLOB = New DATA_BLOB
Dim entropyBlob As DATA_BLOB = New DATA_BLOB
Dim prompt As _
CRYPTPROTECT_PROMPTSTRUCT = New CRYPTPROTECT_PROMPTSTRUCT
InitPrompt(prompt)
description = String.Empty
Try
Try
InitBLOB(cipherTextBytes, cipherTextBlob)
Catch ex As Exception
Throw New Exception("Impossibile inizializzare cipherTextBlob", ex)
End Try
Try
InitBLOB(entropyBytes, entropyBlob)
Catch ex As Exception
Throw New Exception("Impossibile inizializzare entropyBlob", ex)
End Try
Dim flags As Integer = CRYPTPROTECT_UI_FORBIDDEN
Dim success As Boolean = CryptUnprotectData( _
cipherTextBlob, _
description, _
entropyBlob, _
IntPtr.Zero, _
prompt, _
flags, _
plainTextBlob)
If Not success Then
Dim errCode As Integer = Marshal.GetLastWin32Error()
Throw New Exception("Errore CryptUnprotectData", _
New Win32Exception(errCode))
End If
Dim plainTextBytes(plainTextBlob.cbData) As Byte
Marshal.Copy(plainTextBlob.pbData, plainTextBytes, 0, _
plainTextBlob.cbData)
Return plainTextBytes
Catch ex As Exception
Throw New Exception("PAPI non puo decrittare i dati", ex)
Finally
If Not (plainTextBlob.pbData.Equals(IntPtr.Zero)) Then
Marshal.FreeHGlobal(plainTextBlob.pbData)
End If
If Not (cipherTextBlob.pbData.Equals(IntPtr.Zero)) Then
Marshal.FreeHGlobal(cipherTextBlob.pbData)
End If
If Not (entropyBlob.pbData.Equals(IntPtr.Zero)) Then
Marshal.FreeHGlobal(entropyBlob.pbData)
End If
End Try
End Function
End Class