Легкий шифр текста в *.txt

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Легкий шифр текста в *.txt

Сообщение cashman » 08.01.2005 (Сб) 1:15

От шифра не требуется стойкость, чтоб никто не выведал информацию, а чтоб просто в наглую юзверь не зашел в текстовик, выделил все и скопировал.
P.S. желательно чтоб проц почти не нагружало, т.к. прога откравает несколько текстовиков и по одной строчке проверяет... ищет нет ли в этой строчке скомого слова...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.01.2005 (Сб) 1:21

Можно побайтно Xor-ить файл с каким-нибудь числом, например 255.
Изображение

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 08.01.2005 (Сб) 1:29

можно пример....
или исходник

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.01.2005 (Сб) 2:57

Код: Выделить всё
Dim b As Byte
Open "file.txt" For Binary As 1
While Not EOF(1)
    Get 1, , b
    Put 1, , Not b
Wend
Close 1
Изображение

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 08.01.2005 (Сб) 12:23

Вот пример XOR сделал

Код: Выделить всё
Public Function Crypt(key, x As String)'key - ключ
Dim y As String, i, j'x - строка которую надо шифрануть
On Error Resume Next
j = 1
For i = 1 To Len(x)
  If j = Len(key) + 1 Then j = 1
  Mid(x, i, 1) = Chr(Asc(Mid(x, i, 1)) Xor (Asc(Mid(x, j, 1))))
  j = j + 1
Next
Crypt = x
End Function



Не лучший пример и не без багов - если буква сама с собой зашифруется(key=a ; x=a) - шифровка остановится

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 08.01.2005 (Сб) 13:33

2tyomitch
а это декодированию поддается?..
мне же в этом тексте еще текст искать надо будет.
У меня прога вставляла по строке из файла, и проверяла ее на наличее искомого слова.
Все строчки после кодировки будто превратились в единый текст, теперь не знаю совсем как с ним работать...

2skord
это все делается где? в textbox?..

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 08.01.2005 (Сб) 14:05

Дешифровка - тем же кодом!
(not not 1 = 1)
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 08.01.2005 (Сб) 14:25

2VOS
Если так:
Код: Выделить всё
Dim b As Byte
Open "123.txt" For Binary As 1
While Not EOF(1)
    Get 1, , b
    Put 1, , Not Not b
Wend
Close 1

то не получается...
Напиши свой код.

Шнурок
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 12.11.2004 (Пт) 19:28
Откуда: Санкт-Петербург

Сообщение Шнурок » 08.01.2005 (Сб) 14:35

А я помню, как то делал подобное...Replace'ом шифровал :lol:
02.01.2004

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.01.2005 (Сб) 19:39

cashman писал(а):2VOS
Если так:
Код: Выделить всё
Dim b As Byte
Open "123.txt" For Binary As 1
While Not EOF(1)
    Get 1, , b
    Put 1, , Not Not b
Wend
Close 1

то не получается...
Напиши свой код.

Получается. Просто запусти этот код дважды, и ты увидишь, что при первом запуске файл кодируется, при следующем - декодируется.
Изображение

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 08.01.2005 (Сб) 20:45

Дык там Not Not b - результат один и тот же :roll:
2 VOS: используй Not b и для шифровки, и для зашифровки :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.01.2005 (Сб) 20:53

A.A.Z. писал(а):Дык там Not Not b - результат один и тот же :roll:
2 VOS: используй Not b и для шифровки, и для зашифровки :)
Сорри, меня сбили с толку :oops:
На самом деле, я имел в виду тот код, что постил раньше ( http://bbs.vbstreets.ru/viewtopic.php?p=83837#83837 )
Изображение

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 08.01.2005 (Сб) 21:49

ойй... :pukel:
Скопировал код Темыча в VB - вроде прет... ОДИН И ТОТ ЖЕ код для шифрации и дешифрации! К сож. после дешифринга моего autoexec.bat в конце появились 2 непотребных символа!
По-моему, лучше делать с XOR, проверенный метод, все равно для шифрации и дешифр. нужен один код, к тому же XOR'ить можно на разные числа - появляется подобие паролей...

Код: Выделить всё
Const KeyRing = 157

Function Crypt(ByVal StrToCrypt As String) As String
Dim b As Byte, tmp As String
For I = 1 To Len(StrToCrypt)
tmp = tmp + Chr(Asc(Mid(StrToCrypt, I, 1)) Xor KeyRing)
Next I
Crypt = tmp
End Function


Чтоб проверить эффективность:
Код: Выделить всё
Private sub Form_Click()
st$="sadklsahdrulhnds"         'Ну, допустим...
print st$
print Crypt(st$)
print Crypt(crypt(st$))
end sub
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 08.01.2005 (Сб) 23:33

Код: Выделить всё
Option Explicit

Function Crypt$(ByVal What$)
Dim b As Byte, FF&
FF = FreeFile
Open "C:\Temp" For Output As #FF
Print #FF, What
Close #FF
FF = FreeFile
Open "C:\Temp" For Binary As #FF
While Not EOF(FF)
Get #FF, , b
Put #FF, , Not b
Wend
Close #FF
FF = FreeFile
Open "C:\Temp" For Input As #FF
Crypt = Input(LOF(FF), #FF)
Close #FF
Kill "C:\Temp"
End Function

Private Sub Form_Load()
Dim S$
S = Crypt("jdfijdfjdf")
MsgBox S
MsgBox Crypt(S)
End Sub
Все работает :roll:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.01.2005 (Сб) 23:41

Ну разошлись... :roll:
Давайте каждый кинет в топик свой пример шифрования ксором :-)
Это будет повеселее, чем Рассказ из Трёх Слов :lol:
Изображение

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 08.01.2005 (Сб) 23:42

Так это я ж тебя защищаю-то :wink: Там не xor, там not :wink:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.01.2005 (Вс) 0:39

Not a - то же, что a Xor -1
так что разница не такая большая.
Изображение

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 09.01.2005 (Вс) 13:25

Моя функция XOR-ит две строки и возращает результат. Можно прочитать весь файл проXORить и записать или построчно

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 09.01.2005 (Вс) 13:28

Вот

Код: Выделить всё
Dim st, all
Open "xxx.txt" For Input as #1
Do While Not EOF(1)
Line Intput #1, st
all = all & Crypt(st, "your key") & vbCrLf
Loop
Close #1


Расшифровывается также тем же ключом

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 10.01.2005 (Пн) 3:37

VOS писал(а):ойй... :pukel:
Скопировал код Темыча в VB - вроде прет... ОДИН И ТОТ ЖЕ код для шифрации и дешифрации! К сож. после дешифринга моего autoexec.bat в конце появились 2 непотребных символа!
По-моему, лучше делать с XOR, проверенный метод, все равно для шифрации и дешифр. нужен один код, к тому же XOR'ить можно на разные числа - появляется подобие паролей...

Код: Выделить всё
Const KeyRing = 157

Function Crypt(ByVal StrToCrypt As String) As String
Dim b As Byte, tmp As String
For I = 1 To Len(StrToCrypt)
tmp = tmp + Chr(Asc(Mid(StrToCrypt, I, 1)) Xor KeyRing)
Next I
Crypt = tmp
End Function


Чтоб проверить эффективность:
Код: Выделить всё
Private sub Form_Click()
st$="sadklsahdrulhnds"         'Ну, допустим...
print st$
print Crypt(st$)
print Crypt(crypt(st$))
end sub


Считаю что это лучше и не так сложно.
Лучше использовать константу, нежели Mid(x, i, 1) = Chr(Asc(Mid(x, i, 1)) Xor (Asc(Mid(x, j, 1)))) :shock: :?:
Только вопрос про 2 непотребных символа в конце.
Одним и темже алгоритмом не получается, а двумя легко и без
ошибок :roll:
SIVIS PACEM PARA BELLUM

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 10.01.2005 (Пн) 19:17

Послушай, если какой-нить самый ламерский хакет новичок посмотрит на все эти припамбасы. Он просто возьмёт и словит твоё прямо в памяти и уже декодированное. Тобой же :D

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 10.01.2005 (Пн) 23:31

На какие прибамбасы???
Что словит в памяти???
Вовремя декодирования что ли, сам декодируемый текст(данные)???
SIVIS PACEM PARA BELLUM

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.01.2005 (Вт) 4:58

Nikolka писал(а):Послушай, если какой-нить самый ламерский хакет новичок посмотрит на все эти припамбасы. Он просто возьмёт и словит твоё прямо в памяти и уже декодированное. Тобой же :D

О, здорово, начали обсуждать устойчивость шифрования Xor-ом к взлому :lol:

2Nikolka и ломящимся в открытые двери: никто в здравом уме не будет использовать шифрование Xor-ом для сколько-нибудь "секретных" данных. Речь изначально шла именно об "лёгком" шифровании, т.е. чтобы глядя на текст, нельзя было сразу понять, что он значит. Хакеры-новички не в тему.
Изображение

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 11.01.2005 (Вт) 14:10

2A.A.Z.
кодирует, но выдает ошибку на строке:
Crypt = Input(LOF(FF), #FF)
говорит мол Crypt = ""
но MSGBOX текст выводит.
P.S. пока декодирование не успел попробовать
2tyomitch
твой код на кодирование работает - ничего не понять
а вот на декодирование - никак (хоть 2, хоть 3 раза повторить код) - он видимо пытается ее декодировать, но исходный текст не получается - идет новая белиберда
2skord
почему-то создает текстовик абсолютно пустой(((
2Santa
ОТЛИЧНО работает: и кодирует и декодирует
Единственный недостаток - это два символа в конце (видимо они постоянны, не зависят от кодируемого текста). Не знаешь способ от них избавиться.
Только не способом: вставить в текст в ТекстБокс, найти символы "ђ—", удалить.

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 11.01.2005 (Вт) 15:02

Правда код не мой, но все таки :roll:

Код: Выделить всё
Public Function EnDeCrypt(plaintxt As String, Password As String) As String

     Dim temp As Integer
     Dim a As Integer
     Dim b As Integer
     Dim cipherby As Byte
     Dim cipher As String

     b = 0

     For a = 0 To 255
         b = b + 1
         If b > Len(Password) Then
             b = 1
         End If
         kep(a) = Asc(Mid$(Password, b, 1))
     Next a

     For a = 0 To 255
         s(a) = a
     Next a
     
     b = 0

     For a = 0 To 255
         b = (b + s(a) + kep(a)) Mod 256
         temp = s(a)
         s(a) = s(b)
         s(b) = temp
     Next a

     
     For a = 1 To Len(plaintxt)
         cipherby = EnDeCryptSingle(Asc(Mid$(plaintxt, a, 1)))
         cipher = cipher & Chr(cipherby)
     Next
     EnDeCrypt = cipher
End Function

Public Function EnDeCryptSingle(plainbyte As Byte) As Byte
     Dim i As Integer
     Dim j As Integer
     Dim temp As Integer
     Dim k As Integer
     Dim cipherby As Byte
     
     i = (i + 1) Mod 256
     j = (j + s(i)) Mod 256
     temp = s(i)
     s(i) = s(j)
     s(j) = temp
     k = s((s(i) + s(j)) Mod 256)
     cipherby = plainbyte Xor k
     EnDeCryptSingle = cipherby
End Function
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.01.2005 (Вт) 17:34

cashman писал(а):2tyomitch
твой код на кодирование работает - ничего не понять
а вот на декодирование - никак (хоть 2, хоть 3 раза повторить код) - он видимо пытается ее декодировать, но исходный текст не получается - идет новая белиберда

Угу... Опечатался :-(
Код: Выделить всё
Dim b As Byte
Open "file.txt" For Binary As 1
While Not EOF(1)
    Get 1, , b
    Put 1, Loc(1), Not b
Wend
Close 1


"надо же, ошибка в шестом знаке, а такая разница" (с) :-)
Изображение

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 12.01.2005 (Ср) 3:51

tyomitch писал(а):Угу... Опечатался :-(
Код: Выделить всё
Dim b As Byte
Open "file.txt" For Binary As 1
While Not EOF(1)
    Get 1, , b
    Put 1, Loc(1), Not b
Wend
Close 1


"надо же, ошибка в шестом знаке, а такая разница" (с) :-)


Да но два символа в конце после декодировки тоже остаются. :shock:
SIVIS PACEM PARA BELLUM

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 12.01.2005 (Ср) 4:24

_Мика_ писал(а):Правда код не мой, но все таки :roll:

Код: Выделить всё
***
         kep(a) = Asc(Mid$(Password, b, 1))
***
         b = (b + s(a) + kep(a)) Mod 256
***



Что есть kep(a), наверно массив!!!
Если да, то как он определяется и как изменяется, если нет, то что это? :roll:
Ато этот код не работает!
SIVIS PACEM PARA BELLUM

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 13.01.2005 (Чт) 0:03

чисто теоретически:
откуда берутся в конце эти два символа,
а главное - почему они не исчезают???

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 13.01.2005 (Чт) 22:06

Как я понял:
Когда мы сохраняем из блокнота, то начём мы остановились то и сохраниться и с этогоже мы и начнём. А в VB ситуация другая, при сохранении в конце строки добовляется, без нашего на то согласия, не мало известный vbCrLf ( Chr(10)+Chr(13), или возврат котетки и перевод строки ). Когда кодируеш то вроде их не заметно, а когда декодируеш то они оба считываются как два символа, хоть и не видемы, и уже в декодированном тексте они появляются как не помятные знаки. А вот как в одном коде от них избавиться не пойму,
а в двух можно. Но ведь это не решение, речь шла об одном коде. :wink:
SIVIS PACEM PARA BELLUM

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 73

    TopList  
cron