رمزنگاری بین B4A و PHP برای رمزنگاری یک داده در سمت کلاینت و رمزگشایی همان داده در سمت سرور یا بلعکس میتونین از این کدها استفاده کنین.
(برای جلوگیری از سرقت داده در طول مسیر) انگلیسی، فارسی و کاراکترهایی مثل “!@#$%^&*():;.?/<>{}” رو امتحان کردم درست کار کرد.
کتابخونه های StringUtils و Encryption رو فعال کنید.
کدهای B4A:
</pre> Public Sub Encrypt(data As String, Password As String) As String Dim SU As StringUtils Dim abc As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" Dim iv As String = "" For i = 0 To 15 iv = iv & (abc.CharAt(Rnd(0,abc.Length))) Next Dim IVb() As Byte = iv.GetBytes("UTF8") Dim kg As KeyGenerator Dim C As Cipher Dim SU As StringUtils kg.Initialize("AES") kg.KeyFromBytes(Password.GetBytes("UTF8")) C.Initialize("AES/CBC/PKCS5Padding") C.InitialisationVector = IVb Dim datas() As Byte = C.Encrypt(data.GetBytes("UTF8"), kg.Key, True) Return iv & SU.EncodeBase64(datas) End Sub Public Sub Decrypt(data As String, Password As String) As String Dim SU As StringUtils Dim iv As String = data.SubString2(0,16) Dim msg As String=data.Replace(iv,"") Dim IVb() As Byte = iv.GetBytes("UTF8") Dim kg As KeyGenerator Dim C As Cipher kg.Initialize("AES") kg.KeyFromBytes(Password.GetBytes("UTF8")) C.Initialize("AES/CBC/PKCS5Padding") C.InitialisationVector = IVb Dim datas() As Byte = C.Decrypt(SU.DecodeBase64(msg), kg.Key, True) Dim SU As StringUtils Return BytesToString(datas,0,datas.Length,"UTF8") End Sub <pre>
کدهای PHP:
</pre> <?php function Encrypt($data , $Password){ $bytes = random_bytes(8); $iv=bin2hex($bytes); $encryptedData = openssl_encrypt($data, 'AES-256-CBC', $Password, $options=0, $iv); Return $iv.$encryptedData; } function Decrypt($data , $Password){ $iv=substr($data,0,16); $decryptedData = openssl_decrypt(substr($data,16), 'AES-256-CBC', $Password, $options=0, $iv); Return $decryptedData; } ?> <pre>
نحوه استفاده در B4A:
Log(Encrypt("amir","637494aiQ89LI9143560L6A2Xz80Vtu0")) 'رمزنگاری Log(Decrypt("fNcPrHSOkGxgEoKJIKX8jlOIQVxfvc6KDLDk8g==","637494aiQ89LI9143560L6A2Xz80Vtu0")) 'رمزگشایی نحوه استفاده در PHP: echo Encrypt("amir","637494aiQ89LI9143560L6A2Xz80Vtu0"); //رمزنگاری echo Decrypt("fNcPrHSOkGxgEoKJIKX8jlOIQVxfvc6KDLDk8g==","637494aiQ89LI9143560L6A2Xz80Vtu0"); //رمزگشایی
توجه کنید تعداد کاراکترهای Password باید دقیقا 32 باشد.