PDA

View Full Version : سوال: الگوریتم رمز نگاری رشته ها



m2011kh
دوشنبه 02 بهمن 1391, 19:01 عصر
سلام به همه دوستان و استید.
من خیلی وقته دارم با ویبی کار میکنم ولی تا حالا به جایی بر نخوردم که لازم باشه تو برنامه هام دیتا ها رو رمز نگاری کنم.
ولی یه الگوریتم ساده نوشتم برای رمز نگاری دیتا ها.به هر حال چون اولین باریه که برای رمز نگاری مینویسم از دوستان میخوام درباره اش نظر بدن و نقد کنن.
این برای کد کردن:
Public Function CodePS(Text As String) As String
Dim code As String
Dim k As String
For i = 1 To Len(Text)
k = Mid(Text, i, 1)
If Asc(k) > 4 And Asc(k) < 61 Then
code = code + Chr(Asc(k) - 4)
End If
If Asc(k) < 126 And Asc(k) > 64 Then
code = code + Chr(Asc(k) + 4)
End If
Next i
CodePS = code
code = ""
End Function

و این یکی برای آن کد کردن:
Public Function CodeWS(Text As String) As String
Dim code As String
Dim k As String
For i = 1 To Len(Text)
k = Mid(Text, i, 1)
If Asc(k) > 4 And Asc(k) < 61 Then
code = code + Chr(Asc(k) + 4)
End If
If Asc(k) < 126 And Asc(k) > 64 Then
code = code + Chr(Asc(k) - 4)
End If
Next i
CodeWS = code
code = ""
End Function

از نظراتتون خیلی ممنون میشم.

m.4.r.m
دوشنبه 02 بهمن 1391, 19:56 عصر
برای حروف فارسی جواب نمیده .

m2011kh
دوشنبه 02 بهمن 1391, 20:29 عصر
درسته.
من محدوده ای که برای کد کردن مد نظرم بود از A-Z و a-z و اعداد از صفر تا یک و چند تا از حروف دیگه بود.یکی از مشکلاتم هم اینه که رو فارسی کار نمیکنه.
برای فارسی کد های اسکی دیگه ای هست یا راه دیگه ای داره؟؟؟

Mr'Jamshidy
دوشنبه 02 بهمن 1391, 20:55 عصر
اینو ببینی خالی از لطف نیست

نحوه استفاده

Private WithEvents csCrypt As clsCrypto
Private Sub csCrypt_Error(cMsg As String)
Current_Item.Icon = 2
Current_Item.SmallIcon = 2
frmLogRep.sError cMsg
DoEvents
End Sub

Private Sub csCrypt_Success()
Current_Item.Icon = 3
Current_Item.SmallIcon = 3
DoEvents
End Sub
Private Sub Encryption(sPath As String, Password As String, Encrypt As Boolean, SaveOrgFile As Boolean)

Dim strFile As String
Dim lFileLength As Long

lFileLength = FileLen(sPath)
strFile = String(lFileLength, vbNullChar)

Open sPath For Binary Access Read As #1
Get 1, , strFile
Close #1

csCrypt.Password = Password
csCrypt.InBuffer = strFile

If Encrypt Then
If Not csCrypt.HashFile Then Exit Sub
If Not csCrypt.GeneratePasswordKey Then Exit Sub
If Not csCrypt.EncryptFileData Then Exit Sub
Else
If Not csCrypt.GeneratePasswordKey Then Exit Sub
If Not csCrypt.DecryptFileData Then Exit Sub
End If

csCrypt.DestroySessionKey

If csCrypt.OutBuffer <> "" Then
If Not SaveOrgFile Then
Kill sPath
Open sPath For Binary Access Write As #2
Put 2, , csCrypt.OutBuffer
Close #2
Else
Dim tmp() As String
Dim fName As String
Dim fPath As String
Dim i As Integer

tmp = Split(sPath, "\", , vbTextCompare)

fName = tmp(UBound(tmp))
fName = Replace(fName, "ENC.", "", , , vbTextCompare)
fName = Replace(fName, "DEC.", "", , , vbTextCompare)

For i = LBound(tmp) To UBound(tmp) - 1
fPath = fPath & tmp(i) & "\"
Next

If Encrypt Then
Open fPath & "ENC." & fName For Binary Access Write As #2
Else
Open fPath & "DEC." & fName For Binary Access Write As #2
End If
Put 2, , csCrypt.OutBuffer
Close #2
End If
End If
End Sub

m2011kh
دوشنبه 02 بهمن 1391, 21:07 عصر
فکر کنم ی چیزایی فهمیدم.
لقمان میفرمایند:"سخن در فهم مستمعان بگو."
یکم درموردش توضیح بدین بدک نیست.
Thanks
MMD

Mr'Jamshidy
دوشنبه 02 بهمن 1391, 21:18 عصر
فکر کنم ی چیزایی فهمیدم.
لقمان میفرمایند:"سخن در فهم مستمعان بگو."
یکم درموردش توضیح بدین بدک نیست.
Thanks
MMD

متاسفانه این سورس مال من نیست که بتونم در موردش توضیح بدم
تا به حال کد هاشم نگاه نکردم اما فکر کنم از روش Hash برای کد کردن استفاده میکنه

m2011kh
دوشنبه 02 بهمن 1391, 21:24 عصر
من که چیز زیادی ازش سر در نیاوردم ولی بازم ممنون.

arenaw
پنج شنبه 05 بهمن 1391, 15:49 عصر
سلام
میتونی یک مقدار رو در نظر بگیری به عنوان کلید
مثلا 14

بعد بیای واسه انکریپت تمام بایتای اون متنو به علاوه ی 14 کنی
مثلا بایت اول 23 هست
تو میای 23 رو به اضافه 14 میکنی و جواب 37 رو جایگزین میکنی
واسه دیکریپت هم که خب مشخصه دیگه، 37 رو منهای 14 میکنی تا بایت اصلی به دست بیاد
یه مساله ای که هست اینه که مثلا اگه بایت ما 251 بود اگه اونو + 14 کنیم از 255 میزنه بالا
اینجا باید عدد جدید به دست اومدرو - 256 کنیم که درست بشه
اینجوری:
i = i + 14
do while i > 255 : i = i - 256 : loop

امیدوارم به کارت بیاد

m2011kh
پنج شنبه 05 بهمن 1391, 17:20 عصر
سلام.
منظورتون رو متوجه شدم و اگه کدمو ببینین تغریبا من هم همین کارو کردم.
اعداد بین 4 و 64 رو چهار واحد اضافه و اعداد 61 تا 122 رو هم 4 واحد کم کردم. و اعداد بین 61 و 64 رو هیچ تغییری نمیدم.
ولی مشکل من اینجاست که کد های اسکی حروف انگلیسی کاملا مشخصه و تغریبا تو همه ی منابع هم هست ولی میخوام بدونم حروف فارسی هم کد اسکی دارن؟؟؟ اگه دارن این کد ها چه اعدادی هستن؟؟؟مطمئنن یا کد اسکی ندارن یا خارج از محدوده 0 تا 255 هست چون این محدوده که کد های اسکی اش برای حروف خاصصی مشخص شده.پس تکلیف حروف فارسی چیه؟؟؟
متشکرم
MMD

Mr'Jamshidy
پنج شنبه 05 بهمن 1391, 18:32 عصر
ببین حروف فارسی با همون روش بدس میاد ولی یک w آخرش اضافه داره مثلا برای کد اسکی تابع Ascw رو باید استفاده کنی و برای کاراکتر ChrW ولی یک نکته ای هست که نمیدونم چرا هیچکس توجه نمیکنه

کاراکتر های فارسی و کلا غیر انگلیسی از دو باید به جای یک باید استفاده میکنن

مثلا کاراکتر "A" کدش برابر 65 هست که تو حافظه به این صورت ذخیره میشه 1000001
و کاراکتر "آ" کد اسکیش هست 1570 و تو حافظه به صورت 11000100010

اول از همه شما برای کد کردن فایل های فارسی باید اون رو به صورت بایناری باز کنی
بقیه مراحل هم همونه و فرقی نداره شما بایت بایت که تقییر بدی هر 2 باید یک کاراکتر تقییر میکنه پس زیاد خودتو درگیر این موضوع نکن و از همون ASC و CHR معمولی استفاده کن