Italian Criptare una stringa compatibile con B4a e B4i

toro1950

Active Member
Licensed User
Buongiorno,
ho bisogno di criptare una stringa che possa essere interpretata sia da B4a che da b4i,
in questo momento io cripto e decripto su b4a sfruttando la libreria Encryptiom

B4X:
Sub DecryptAES(strDataToDecrypt As String, strKey As String) As String
 
    Dim SU As StringUtils
    Dim kg As KeyGenerator
    Dim C As Cipher
    Dim md As MessageDigest
    Dim Decrypted() As Byte
    kg.Initialize("AES")
    kg.KeyFromBytes(md.GetMessageDigest(strKey.GetBytes("UTF8"), "MD5"))
    
    C.Initialize("AES/ECB/PKCS5Padding")
 
    Dim Bytes() As Byte = SU.DecodeBase64(strDataToDecrypt)
    Decrypted = C.Decrypt(Bytes, kg.Key, False)
    Return BytesToString(Decrypted, 0, Decrypted.Length, "UTF8")

End Sub
con B4i sfrutto la libreria iEncryptiom
B4X:
 Sub Decrypt(encryptedData As String,key As String) As String
    
    Dim cifro As Cipher

    Dim ByteArray() As Byte
    Dim result() As Byte
    
    Dim s As StringUtils
    result=s.DecodeBase64(encryptedData)
    ByteArray = cifro.Decrypt(result , password)
    
    Return BytesToString(ByteArray, 0, ByteArray.Length, "UTF8")

End Sub
Purtroppo la stringa criptata con un sistema non viene letta dall'altro sistema
chiaramente la password è sempre la stessa
Esiste una libreria o qualcos'altro che renda le stringhe compatibili?
 

LucaMs

Expert
Licensed User
Longtime User
Se volete posso darvi una mia piccolissima libreria B4X che evita dobbiate ricordarvi/usare l'array di byte, basata anch'essa su B4XCipher.

Quell'esempio:

1757079585308.png


Con la mia libreria:
B4X:
Dim Encrypted As String = EncrDecrBase64.Encr("confidential", "123456")
Log(EncrDecrBase64.Decr(Encrypted, "123456"))
 

toro1950

Active Member
Licensed User
Ho provato con quello che mi ha suggerito Sagenut, i file con le stringhe criptate vengono letti e convertiti correttamente
su ambedue i sistemi come volevo, però ho un dubbio per la criptazione,
B4X:
Dim EncryptedData() As Byte =EncryptText(stringa,"toro1950")
        stringacriptata = su.EncodeBase64(EncryptedData)
il codice si trova dentro un for next che potrebbe esssere superio a 200-3000
Quel dim ripetuto va bene?
LucaMs con la tua libreria quel dim penso non deve essere ripetuto giusto ?
stringacriptata=EncrDecrBase64.Encr("confidential", "123456")
 

LucaMs

Expert
Licensed User
Longtime User
Ho provato con quello che mi ha suggerito Sagenut, i file con le stringhe criptate vengono letti e convertiti correttamente
su ambedue i sistemi come volevo, però ho un dubbio per la criptazione,
B4X:
Dim EncryptedData() As Byte =EncryptText(stringa,"toro1950")
        stringacriptata = su.EncodeBase64(EncryptedData)
il codice si trova dentro un for next che potrebbe esssere superio a 200-3000
Quel dim ripetuto va bene?
LucaMs con la tua libreria quel dim penso non deve essere ripetuto giusto ?
stringacriptata=EncrDecrBase64.Encr("confidential", "123456")
No, quel c As B4XCipher puoi metterlo come dichiarazione a livello di classe o anche di progetto, non si deve ripetere.
Nel mio caso non serve proprio, selezioni la libreria e basta.

Ovviamente cambiagli nome, che "c"... nun se po' guarda' 😁
 
Top