Italian Criptare una stringa con una password

toro1950

Active Member
Licensed User
Salve ragazzi, proseguo con la monopolizzazione di questo forum, proseguendo con lo sviluppo dell'app mi è venuto in mente di proteggere i due database da una password, tramite ricerche su questo forum sono riuscito nell'intento utilizzando la libreria SQLCipher. Cominciando a pensare come pubblicarla ho trovato e pensato che la soluzione migliore è di pubblicarla come versione di prova con un tempo limitato 20-30 gg e fare in modo che se all'utente piace e vuole acquistarla, dopo un pagamento dovrei inviargli una password per l'attivazione definitiva o annuale. Questa password dovrebbe contenere al suo interno i dati dell'utente identici a quelli inseriti nella configurazione dell'app, eventuali altri dati (un dato o qualcos'altro) e criptati con una mia password inserita anche nel software per decriptare il tutto. Mi sembra una buona idea, e voi? migliori soluzioni sono apprezzate. Il problema è che non riesco a trovare una soluzione per ottenere la password, ho trovato qualcosa ma ogni volta mi da una risposta diversa quindi non utilizzabile. Io ho un codice che utilizzo nei miei software ma non trovo le corrispondenze in b4a, per esempio questo BitWise.BitAnd, in allegato le due routine, magari qualcuno potrebbe adattarle. Se esiste qualcosa di simile in b4a meglio
 

toro1950

Active Member
Licensed User
Chiedo scusa, avevo messo l'allegato come rtf ma non me lo ha inserito provo come .txt
 

Attachments

  • Soluzionepc.txt
    929 bytes · Views: 83

toro1950

Active Member
Licensed User
Grzie AlpVir, dove trovo questa libreria con le relative spiegazioni, io nel software trovo StringUtils è questo?
Può farmi un esempio?
 

toro1950

Active Member
Licensed User
Ho trovato e scaricato questa libreria, ma non mi è utile, non permette di inserire una chiave nella stringa, grazie comunque
 

shadow

Active Member
Licensed User
Longtime User
Ciao,

 

shadow

Active Member
Licensed User
Longtime User
Mi sveglio sempre presto, ma stamattina prima del solito. Ma anche tu vedo che sei mattiniero... :)
 

shadow

Active Member
Licensed User
Longtime User
Alla faccia del bicarbonato di sodio... :)
Come si dice: Chi dorme non piglia pesci!
È anche il motto di checca pavone, in effetti è una vita che non dorme. ?
 

toro1950

Active Member
Licensed User
Buongiono e Buona domenica dopo varie prove sono vicino ad una soluzione utilizzando la libreria
BAXEncryption ma ho bisogno del vostro aiuto per utilizzarla perché non riesco ad associare ad una variabile
i risultati dell'encrypt e Decrypt, al momento riesco solo a visualizzarli.

B4X:
Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private Button1 As Button
    Private Button2 As Button
    Dim c As B4XCipher
    Dim testo As String ="Graziani Mario"
    Dim password As String ="mypassw"
End Sub

Public Sub Initialize
'    B4XPages.GetManager.LogEvents = True
End Sub


Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
End Sub

Sub button1_Click
    'EncryptText
    ToastMessageShow (c.Encrypt(testo.GetBytes("utf8"), password),False)
    'come associare quello che visualizzo
End Sub

Sub button2_Click
    'DecryptText
    'codice originale    'Dim b() As Byte = c.Decrypt(EncryptedData, password)
    Dim b() As Byte = c.Decrypt(c.Encrypt(testo.GetBytes("utf8"), password), password)
    ToastMessageShow(BytesToString(b, 0, b.Length, "utf8"),False)
    'item qui'
End Sub
come scritto nel codice ho bisogno di associare le risposte a variabili, ho provato con variabili stringa, double ma non funziona, non
ho una grande esperienza con B4A
 

toro1950

Active Member
Licensed User
Ringrazio Ombra che con il suo link sono arrivato alla libreria BAXEncryption, inoltre ringrazio il sempre presente e pronto all'aiuto
il mio omonimo LucaMs a cui chiedo un ulteriore aiuto; la parte Crittografia la utilizzo io e dovrò dare la stringa (BE), via mail o via WhatsApp
all'utente che la scriverà nell'apposita casella di testo dell'app, quindi verrà visualizzata dall'app come una stringa, come convertire questa in
un variabile Byte praticamente in BE, ho provato con BE=stringa.getBytes("UTF8") ma non funziona
 

shadow

Active Member
Licensed User
Longtime User
Anche il codice del link che ho postato si aggancia alla libreria Encryption.
Per criptare :
Dim crypt as string= EncryptAES(stringa, chiave)
Per decriptare:
Dim decrypt as string= DecryptAES(stringa, chiave)

B4X:
Sub EncryptAES(strDataToEncrypt As String, strKey As String) As String
 
    Dim SU As StringUtils
    Dim kg As KeyGenerator
    Dim C As Cipher
    Dim md As MessageDigest
    Dim encrypted() As Byte
    kg.Initialize("AES")
    kg.KeyFromBytes(md.GetMessageDigest(strKey.GetBytes("UTF8"), "MD5"))
    
    C.Initialize("AES/ECB/PKCS5Padding")
    encrypted = C.Encrypt(strDataToEncrypt.GetBytes("UTF8"), kg.Key, False)
    Return SU.EncodeBase64(encrypted)

End Sub


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
 

LucaMs

Expert
Licensed User
Longtime User
Ringrazio Ombra che con il suo link sono arrivato alla libreria BAXEncryption, inoltre ringrazio il sempre presente e pronto all'aiuto
il mio omonimo LucaMs a cui chiedo un ulteriore aiuto; la parte Crittografia la utilizzo io e dovrò dare la stringa (BE), via mail o via WhatsApp
all'utente che la scriverà nell'apposita casella di testo dell'app, quindi verrà visualizzata dall'app come una stringa, come convertire questa in
un variabile Byte praticamente in BE, ho provato con BE=stringa.getBytes("UTF8") ma non funziona
Mi pare di capire che invierai la stringa criptata e questa dovrà essere visualizzata "in chiaro" (decifrata) dall'app che la riceve.


Usa la libreria StringUtils:
'------------------------------------------------
'Qui la parte di cifratura del post precedente.
'Poi:
'------------------------------------------------
    'Invio stringa criptata
    Dim strCriptata As String
    Dim SU As StringUtils
    strCriptata = SU.EncodeBase64(BE)
    ' qui il concreto invio di strCriptata
  
    'Ricevo e visualizzo strCriptata
    Dim BE() As Byte
    BE = SU.DecodeBase64(strCriptata)
    B = c.Decrypt(BE, password)
    Dim StringaInChiaro As String
    StringaInChiaro = BytesToString(B, 0, B.Length, "UTF-8")
    Log(StringaInChiaro)
 

toro1950

Active Member
Licensed User
Buonasera, forse meglio buonanotte, scusami LucaMs sicuramente non mi sono spiegato bene, devo inviare all'utente la stringa che rilascia
B4X:
Sub button1_Click
    'EncryptText la utilizzo io e da questa ho un risposta nella variabile BE() che riesco a leggere tramite msgbox
    B = testo.GetBytes("UTF8")
    BE = c.Encrypt(B, password)
    Msgbox (BE,"questa stringa devo inviare")
' la stringa che leggerò con msgbox la passerò all'utente via mail o altro
    End Sub

Sub button2_Click
    'sub Decryption che utilizzerà l'app per decifrare la password e fare i dovuti controlli ed eventuali setup
    'per farlo l'app una volta letto la stringa dovrà trasformala come variabile BE()
    'per proseguire con il seguente codice. Ecco questo mi serve: BE=??
    B = c.Decrypt(BE, password)
        Dim s As String
    s = BytesToString(B, 0, B.Length, "UTF-8")
    labrisp.Text=S
    
    'l'app tramite la stringa s farà i dovuti controlli, confronti e quant'altro
    
End Sub
il codice Encryption, nel codice riesco a spiegarmi meglio
 

toro1950

Active Member
Licensed User
Buongiorno, ricontrollando questa mattina mi sono accorto che non avevo capito bene il tuo codice, l'ho provato e adesso funziona, però
c'è una stringa troppo lunga da copiare ed inviarla tramite mail o altro (sono circa 90 100 caratteri), io pensavo che era quella che leggevo con msgbox, dovrò trovare un altro modo ?
 

Sagenut

Expert
Licensed User
Longtime User
Potresti inviarla come file di testo e fare leggere il file alla app che si occuperà dell'inserimento.
Comunque anche inviandola come testo in un messaggio o in email poi l'utente potrebbe semplicemente copiarla e incollarla nella app.
 
Top