View Full Version : سوال: الگوریتم رمز نگاری رشته ها
  
m2011kh
دوشنبه 02 بهمن 1391, 20: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, 20:56 عصر
برای حروف فارسی جواب نمیده .
m2011kh
دوشنبه 02 بهمن 1391, 21:29 عصر
درسته.
من محدوده ای که برای کد کردن مد نظرم بود از A-Z و a-z و اعداد از صفر تا یک و چند تا از حروف دیگه بود.یکی از مشکلاتم هم اینه که رو فارسی کار نمیکنه.
برای فارسی کد های اسکی دیگه ای هست یا راه دیگه ای داره؟؟؟
Mr'Jamshidy
دوشنبه 02 بهمن 1391, 21: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, 22:07 عصر
فکر کنم ی چیزایی فهمیدم.
لقمان میفرمایند:"سخن در فهم مستمعان بگو."
یکم درموردش توضیح بدین بدک نیست.
Thanks
MMD
Mr'Jamshidy
دوشنبه 02 بهمن 1391, 22:18 عصر
فکر کنم ی چیزایی فهمیدم.
لقمان میفرمایند:"سخن در فهم مستمعان بگو."
یکم درموردش توضیح بدین بدک نیست.
Thanks
MMD
 
متاسفانه این سورس مال من نیست که بتونم در موردش توضیح بدم
تا به حال کد هاشم نگاه نکردم اما فکر کنم از روش Hash برای کد کردن استفاده میکنه
m2011kh
دوشنبه 02 بهمن 1391, 22:24 عصر
من که چیز زیادی ازش سر در نیاوردم ولی بازم ممنون.
arenaw
پنج شنبه 05 بهمن 1391, 16: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, 18:20 عصر
سلام.
منظورتون رو متوجه شدم و اگه کدمو ببینین تغریبا من هم همین کارو کردم.
اعداد بین 4 و 64 رو چهار واحد اضافه و اعداد 61 تا 122 رو هم 4 واحد کم کردم. و اعداد بین 61 و 64 رو هیچ تغییری نمیدم.
ولی مشکل من اینجاست که کد های اسکی حروف انگلیسی کاملا مشخصه و تغریبا تو همه ی منابع هم هست ولی میخوام بدونم حروف فارسی هم کد اسکی دارن؟؟؟ اگه دارن این کد ها چه اعدادی هستن؟؟؟مطمئنن یا کد اسکی ندارن یا خارج از محدوده 0 تا 255 هست چون این محدوده که کد های اسکی اش برای حروف خاصصی مشخص شده.پس تکلیف حروف فارسی چیه؟؟؟
متشکرم
MMD
Mr'Jamshidy
پنج شنبه 05 بهمن 1391, 19:32 عصر
ببین حروف فارسی با همون  روش بدس میاد ولی یک w آخرش اضافه داره مثلا برای کد اسکی تابع Ascw رو باید استفاده کنی و برای کاراکتر ChrW ولی یک نکته ای هست که نمیدونم چرا هیچکس توجه نمیکنه
کاراکتر های فارسی و کلا غیر انگلیسی از دو باید به جای یک باید استفاده میکنن
مثلا کاراکتر "A" کدش برابر 65 هست که تو حافظه به این صورت ذخیره میشه 1000001
و کاراکتر "آ" کد اسکیش هست 1570 و تو حافظه به صورت 11000100010
اول از همه شما برای کد کردن فایل های فارسی باید اون رو به صورت بایناری باز کنی
بقیه مراحل هم همونه و فرقی نداره شما بایت بایت که تقییر بدی هر 2 باید یک کاراکتر تقییر میکنه پس زیاد خودتو درگیر این موضوع نکن و از همون ASC و CHR معمولی استفاده کن
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.