Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Знаю что просто, но сделать несмогу... помогите =) Добавлено: 19.12.07 12:35  

Автор вопроса:  __Pavel__ | Web-сайт: ммм.сайта.НЕТ
Значит так... мне надо закодировать информацию и записать ее в файл, я скачал код кодировки и раскодировки(это я сам сделаю по подобию). Все бы хорошо, да вот беда мне нужно записать массив Text(7, 200) а т.к. я еще новичек, то в этом коде ниче понять не могу!вот код кодировки... там все расписано:

Dim Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Ключ
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


все дело в том что мне нужно записать этот массив в файл по следующему коду, но при этом чтобы он уже был закодирован:
    Dim T(7, 200), Z, PutSave As String
        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)


Почему именно поэтому коду? Да потомучто я другой непойму! =)

Вот код разкодировки (если вдруг еще и напишете код чтения, чему я был бы очень рад =))

Private Sub Decrypt ()
'Создаём экземпляр класса 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
Прсмотри пример и на его основании записывай и читай. В переменную ОВ можешь передавать массив, или переюбьяви её под свой тип. Вообщем здесь ничего сложного.
Код кодировки немного подправь и будет тебе счастье.
Да, если в массиве данные типа интегер и если ОВ переобьявишь как интегер, то я думаю, что в файле никто ничего не поймет и без кодировки.
Imports System.io

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
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Imports Microsoft.VisualBasic


    Public Class DPAPI

        <;DllImport("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

        <;DllImport("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( _
                ;Decrypt(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(";DPAPI 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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам