Problème d'utilisation pour le cryptage façon Rijndael
9 réponses
news.microsoft.com
Bonjour,
Je suis sous VB .Net 2003 et j'utilise une classe de cryptage Rijndael qui
fonctionne parfaitement.
Mon problème est que lorsque je décrypte, il se passe très rarement un
phénomène qui fait que soit le décryptage est impossible, soit la valeur
décryptée n'est pas égale à la valeur d'origine.
Ce phénomène se produit lorsque le caractère 10 ou le caractère 13 se
retrouve dans la chaîne cryptée.
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la
chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent
le décryptage de 2 facons différentes :
Soit le caractère 10 ou 13 est le 1er caractère est dans ce cas là, le
décryptage lui même génère une erreur (car la ligne lue est vide).
Soit le caractère 10 ou 13 est dans la chaîne est dans ce cas là, le
décryptage est bien possible, mais la valeur décryptée est différente de la
valeur d'origine.
J'ai bien pensé à remplacer dans la chaîne cryptée, avant d'enregistrer dans
le fichier, les caractères 10 et 13 par, par exemple 254 et 255 (ou tout
autre caractères valides), pour, lors du décryptage, remettre à l'endroit,
mais cette bidouille cache un autre problème, si la chaîne cryptée contenait
vraiment un caractère 254 ou 255, donc cela ne convient pas.
J'ai également pensé à remplacer dans la même perspective les caratères 10
et 13 par une chaîne plus longue (ex : 240 240 242 243 244 245 et 250 251
252 253 254 255) , mais le problème reste toujours possible même si cela le
raréfie.
Bref, mon problème est que je ne sais pas comment gérer ce phénomène.
Afin de vous aider au mieux, je vous met ci-dessous la classe Rijndael que
j'utilise (je l'ai appelé Raindoll, ca se prononce comme ca), suivi d'un
petit boût de code (cryptage et décyptage d'un simple compteur) qui permet
de très bien comprendre mon problème (j'ai remplacé ma clef de cryptage
ainsi que le vecteur pour des raisons de confidentialités).
Merci d'avance pour votre aide,
Stéphane
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography
Public Class raindoll
' Utilitaire de cryptographie
Protected Rijndael As New RijndaelManaged ' Fournit une implémentation de
l'algorithme de Rijndael pour le cryptage et le décryptage des données
Private m_Key() As Byte ' Clé de cryptage
Private m_IV() As Byte ' Vecteur d'interruption
' Constructeur par défaut : ne fait rien
Public Sub New()
End Sub
' Constructeur qui initialise la clé de cryptage et le vecteur
d'interruption.
' Les paramètres Key et IV représentent des tableaux de 16 octets
Public Sub New(ByVal Key() As Byte, ByVal IV() As Byte)
Me.Key = Key
Me.IV = IV
End Sub
' Autre constructeur qui initialise la clé de cryptage et le vecteur
d'interruption.
' Les paramètres sKey et sIV représentent des chaînes de 8 caractères
UNICODE.
Public Sub New(ByVal sKey As String, ByVal sIV As String)
Dim ue As New UnicodeEncoding ' Servira à convertir les chaînes en tableaux
d'octets
If sKey.Length > 8 Then ' Si la chaîne est trop longue, on la tronque
sKey = sKey.Substring(0, 8)
ElseIf sKey.Length < 8 Then ' Si par contre la chaîne est trop courte, on la
complète
Dim n As Integer = 8 - sKey.Length
For i As Integer = 0 To n - 1
sKey &= i
Next
End If
If sIV.Length > 8 Then
sIV = sIV.Substring(0, 8)
ElseIf sIV.Length < 8 Then
Dim n As Integer = 8 - sIV.Length
For i As Integer = 0 To n - 1
sIV &= i
Next
End If
' Conversion des deux chaînes en tableaux d'octets
Key = ue.GetBytes(sKey)
IV = ue.GetBytes(sIV)
End Sub
' Accesseur pour la clé de cryptage
Public Property Key() As Byte()
Get
Return m_Key
End Get
Set(ByVal Value As Byte())
m_Key = Value
End Set
End Property
' Accesseur pour le vecteur d'interruption
Public Property IV() As Byte()
Get
Return m_IV
End Get
Set(ByVal Value As Byte())
m_IV = Value
End Set
End Property
' Crypte le texte reçu du flux input et dirige le resultat vers le flux
output
Public Sub Encrypt(ByVal input As Stream, ByVal output As Stream)
' L'écriture dans le flux cs produira une sortie cryptée selon l'algorithme
de Rijndael
' avec m_Key comme clé et m_IV comme vecteur d'interruption
Dim cs As New CryptoStream(output, Rijndael.CreateEncryptor(m_Key, m_IV),
CryptoStreamMode.Write)
Dim buffer(100) As Byte ' tampon utilisé pour la lecture et l'écriture
Dim n As Integer ' nombre d'octets réellement lus ou écrits
' La suite ressemble à un transfert de données entre deux flux quelconques
Do
n = input.Read(buffer, 0, 100)
cs.Write(buffer, 0, n)
Loop Until n < 100
cs.Close()
End Sub
' Décrypte le texte reçu du flux input et dirige le resultat vers le flux
output
Public Sub Decrypt(ByVal input As Stream, ByVal output As Stream)
' La lecture à partir du flux cs est précédée du décryptage des données
d'origine.
' La clé de cryptage et le vecteur d'interruption doivent être les mêmes que
' ceux utilisés lors du cryptage des données.
Dim cs As New CryptoStream(input, Rijndael.CreateDecryptor(m_Key, m_IV),
CryptoStreamMode.Read)
Dim buffer(100) As Byte
Dim n As Integer
Do
n = cs.Read(buffer, 0, 100)
output.Write(buffer, 0, n)
Loop Until n < 100
cs.Close()
End Sub
' Crypte un texte en mémoire et retourne le texte crypté
Public Function EncryptText(ByVal original As String) As String
' On crée un MemoryStream avec le texte original
Dim UE As New UnicodeEncoding
Dim msIn As New MemoryStream(UE.GetBytes(original))
' et on en crée un autre pour la sortie
Dim msOut As New MemoryStream
' Les deux flux sont transmis à la méthode encrypt
Encrypt(msIn, msOut)
msIn.Close()
' Puis, on recupère le contenu du flux de sortie
Dim encrypted As String = UE.GetString(msOut.ToArray)
msOut.Close()
' Qu'on retourne en guise de resultat
Return encrypted
End Function
' Décrypte un texte en mémoire et retourne le texte décrypté
' Le principe est analogue à celui de EncryptText
Public Function DecryptText(ByVal encrypted As String) As String
Dim UE As New UnicodeEncoding
Dim msIn As New MemoryStream(UE.GetBytes(encrypted))
Dim msOut As New MemoryStream
Decrypt(msIn, msOut)
msIn.Close()
Dim decrypted As String = UE.GetString(msOut.ToArray)
msOut.Close()
Return decrypted
End Function
' Crypte un fichier texte et produit un autre fichier texte complètement
illisible
Public Sub EncryptFile(ByVal original As String, ByVal encrypted As String)
' On obtient un flux qui représente le fichier original
Dim fsIn As New FileStream(original, FileMode.Open)
' On en obtient un autre qui représente le fichier crypté
Dim fsOut As New FileStream(encrypted, FileMode.Create)
' On trasmet les deux flux à la méthode Encrypt et le travail est fait
Encrypt(fsIn, fsOut)
fsIn.Close()
fsOut.Close()
End Sub
' Décrypte un fichier texte crypté pour reconstituer le fichier original
' Le principe est analogue à celui de EncryptFile
Public Sub DecryptFile(ByVal encrypted As String, ByVal decrypted As String)
Dim fsIn As New FileStream(encrypted, FileMode.Open)
Dim fsOut As New FileStream(decrypted, FileMode.Create)
Decrypt(fsIn, fsOut)
fsIn.Close()
fsOut.Close()
End Sub
' Crypte un texte en mémoire à destination d'un fichier sur disque
Public Sub EncryptTextToFile(ByVal original As String, ByVal filename As
String)
' On crée un MemoryStream avec le texte original
Dim UE As New UnicodeEncoding
Dim msIn As New MemoryStream(UE.GetBytes(original))
' On obtient un flux de sortie qui représente le fichier crypté
Dim fsOut As New FileStream(filename, FileMode.Create)
' On trasmet les deux flux à la méthode Encrypt et le travail est fait
Encrypt(msIn, fsOut)
msIn.Close()
fsOut.Close()
End Sub
' Décrypte un fichier texte crypté et retourne le texte original
' sous la forme d'une très longue chaîne de caractères.
' Le principe est analogue à celui de EncryptTextToFile
Public Function DecryptTextFromFile(ByVal filename As String) As String
Dim UE As New UnicodeEncoding
Dim fsIn As New FileStream(filename, FileMode.Open)
Dim msOut As New MemoryStream
Decrypt(fsIn, msOut)
fsIn.Close()
Dim decrypted As String = UE.GetString(msOut.ToArray)
msOut.Close()
Return decrypted
End Function
End Class
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des
composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents TextBox_effectués As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents TextBox_erreurs As System.Windows.Forms.TextBox
Friend WithEvents CheckBox_Test As System.Windows.Forms.CheckBox
Friend WithEvents Label4 As System.Windows.Forms.Label
Friend WithEvents Label5 As System.Windows.Forms.Label
Friend WithEvents Label6 As System.Windows.Forms.Label
Friend WithEvents TextBox_erreurs_décryptage As System.Windows.Forms.TextBox
Friend WithEvents TextBox_erreurs_cryptage As System.Windows.Forms.TextBox
Friend WithEvents Label7 As System.Windows.Forms.Label
Friend WithEvents TextBox_détails As System.Windows.Forms.TextBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label
Me.TextBox_effectués = New System.Windows.Forms.TextBox
Me.Label2 = New System.Windows.Forms.Label
Me.TextBox_erreurs = New System.Windows.Forms.TextBox
Me.CheckBox_Test = New System.Windows.Forms.CheckBox
Me.Label4 = New System.Windows.Forms.Label
Me.Label5 = New System.Windows.Forms.Label
Me.Label6 = New System.Windows.Forms.Label
Me.TextBox_erreurs_décryptage = New System.Windows.Forms.TextBox
Me.TextBox_erreurs_cryptage = New System.Windows.Forms.TextBox
Me.TextBox_détails = New System.Windows.Forms.TextBox
Me.Label7 = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(8, 8)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(168, 23)
Me.Label1.TabIndex = 0
Me.Label1.Text = "Tests de cryptage / décryptage"
'
'TextBox_effectués
'
Me.TextBox_effectués.Location = New System.Drawing.Point(160, 32)
Me.TextBox_effectués.Name = "TextBox_effectués"
Me.TextBox_effectués.ReadOnly = True
Me.TextBox_effectués.TabIndex = 1
Me.TextBox_effectués.Text = ""
'
'Label2
'
Me.Label2.Location = New System.Drawing.Point(8, 32)
Me.Label2.Name = "Label2"
Me.Label2.TabIndex = 2
Me.Label2.Text = "Effectués"
'
'TextBox_erreurs
'
Me.TextBox_erreurs.Location = New System.Drawing.Point(160, 72)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Dans : news:%237lHAdMpGHA.4848@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et
donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et
fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre
autres), enregistre tes chaînes cryptées en les encodant en base64.
(voir System.Convert)
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
news.microsoft.com
Merci Fred, je vais regarder de ce côté et je te tiens au courant.
Stéphane.
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Merci Fred, je vais regarder de ce côté et je te tiens au courant.
Stéphane.
"Fred" <foleide@libre.france> a écrit dans le message de news:
O06avlMpGHA.3288@TK2MSFTNGP03.phx.gbl...
Dans : news:%237lHAdMpGHA.4848@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et
donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et
fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre
autres), enregistre tes chaînes cryptées en les encodant en base64.
(voir System.Convert)
Merci Fred, je vais regarder de ce côté et je te tiens au courant.
Stéphane.
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
news.microsoft.com
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà encodé en unicode.
J'ai fait ainsi : Dans la class Raindoll, Dans la fonction Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat Return encrypted
par ceci :
' Qu'on retourne en guise de resultat ' Return encrypted 'en base 64 Dim encrypted_bytes As Byte() For i As Integer = 1 To encrypted.Length encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1))) Next Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal Dim encrypted_bytes As Byte() encrypted_bytes = Convert.FromBase64String(encrypted) encrypted = "" For Each encrypted_byte As Byte In encrypted_bytes encrypted &= Chr(encrypted_byte) Next
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne
pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà
encodé en unicode.
J'ai fait ainsi :
Dans la class Raindoll,
Dans la fonction
Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat
Return encrypted
par ceci :
' Qu'on retourne en guise de resultat
' Return encrypted
'en base 64
Dim encrypted_bytes As Byte()
For i As Integer = 1 To encrypted.Length
encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1)))
Next
Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal
Dim encrypted_bytes As Byte()
encrypted_bytes = Convert.FromBase64String(encrypted)
encrypted = ""
For Each encrypted_byte As Byte In encrypted_bytes
encrypted &= Chr(encrypted_byte)
Next
"Fred" <foleide@libre.france> a écrit dans le message de news:
O06avlMpGHA.3288@TK2MSFTNGP03.phx.gbl...
Dans : news:%237lHAdMpGHA.4848@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et
donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et
fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre
autres), enregistre tes chaînes cryptées en les encodant en base64.
(voir System.Convert)
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà encodé en unicode.
J'ai fait ainsi : Dans la class Raindoll, Dans la fonction Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat Return encrypted
par ceci :
' Qu'on retourne en guise de resultat ' Return encrypted 'en base 64 Dim encrypted_bytes As Byte() For i As Integer = 1 To encrypted.Length encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1))) Next Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal Dim encrypted_bytes As Byte() encrypted_bytes = Convert.FromBase64String(encrypted) encrypted = "" For Each encrypted_byte As Byte In encrypted_bytes encrypted &= Chr(encrypted_byte) Next
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
news.microsoft.com
Erratum :
Remplacer dans la fonction encrypt : Dim encrypted_bytes As Byte() par : Dim encrypted_bytes(encrypted.Length) As Byte
Mais cette fois ci, j'ai 1 erreur systématique de décryptage... snif :/
"news.microsoft.com" a écrit dans le message de news:
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà encodé en unicode.
J'ai fait ainsi : Dans la class Raindoll, Dans la fonction Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat Return encrypted
par ceci :
' Qu'on retourne en guise de resultat ' Return encrypted 'en base 64 Dim encrypted_bytes As Byte() For i As Integer = 1 To encrypted.Length encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1))) Next Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal Dim encrypted_bytes As Byte() encrypted_bytes = Convert.FromBase64String(encrypted) encrypted = "" For Each encrypted_byte As Byte In encrypted_bytes encrypted &= Chr(encrypted_byte) Next
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Erratum :
Remplacer dans la fonction encrypt :
Dim encrypted_bytes As Byte()
par :
Dim encrypted_bytes(encrypted.Length) As Byte
Mais cette fois ci, j'ai 1 erreur systématique de décryptage... snif :/
"news.microsoft.com" <nsolsapvaemrgne@npooswpearm-m.fr> a écrit dans le
message de news: OHgf8ZNpGHA.1140@TK2MSFTNGP05.phx.gbl...
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne
pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà
encodé en unicode.
J'ai fait ainsi :
Dans la class Raindoll,
Dans la fonction
Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat
Return encrypted
par ceci :
' Qu'on retourne en guise de resultat
' Return encrypted
'en base 64
Dim encrypted_bytes As Byte()
For i As Integer = 1 To encrypted.Length
encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1)))
Next
Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal
Dim encrypted_bytes As Byte()
encrypted_bytes = Convert.FromBase64String(encrypted)
encrypted = ""
For Each encrypted_byte As Byte In encrypted_bytes
encrypted &= Chr(encrypted_byte)
Next
"Fred" <foleide@libre.france> a écrit dans le message de news:
O06avlMpGHA.3288@TK2MSFTNGP03.phx.gbl...
Dans : news:%237lHAdMpGHA.4848@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et
donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et
fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre
autres), enregistre tes chaînes cryptées en les encodant en base64.
(voir System.Convert)
Remplacer dans la fonction encrypt : Dim encrypted_bytes As Byte() par : Dim encrypted_bytes(encrypted.Length) As Byte
Mais cette fois ci, j'ai 1 erreur systématique de décryptage... snif :/
"news.microsoft.com" a écrit dans le message de news:
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà encodé en unicode.
J'ai fait ainsi : Dans la class Raindoll, Dans la fonction Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat Return encrypted
par ceci :
' Qu'on retourne en guise de resultat ' Return encrypted 'en base 64 Dim encrypted_bytes As Byte() For i As Integer = 1 To encrypted.Length encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1))) Next Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal Dim encrypted_bytes As Byte() encrypted_bytes = Convert.FromBase64String(encrypted) encrypted = "" For Each encrypted_byte As Byte In encrypted_bytes encrypted &= Chr(encrypted_byte) Next
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
news.microsoft.com
Erratum 2 :
Dans décrypt, le mieux est de mettre uniquement cette ligne : encrypted = UE.GetString(Convert.FromBase64String(encrypted))
juste après la déclaration de ue
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
"news.microsoft.com" a écrit dans le message de news:
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà encodé en unicode.
J'ai fait ainsi : Dans la class Raindoll, Dans la fonction Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat Return encrypted
par ceci :
' Qu'on retourne en guise de resultat ' Return encrypted 'en base 64 Dim encrypted_bytes As Byte() For i As Integer = 1 To encrypted.Length encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1))) Next Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal Dim encrypted_bytes As Byte() encrypted_bytes = Convert.FromBase64String(encrypted) encrypted = "" For Each encrypted_byte As Byte In encrypted_bytes encrypted &= Chr(encrypted_byte) Next
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Erratum 2 :
Dans décrypt, le mieux est de mettre uniquement cette ligne :
encrypted = UE.GetString(Convert.FromBase64String(encrypted))
juste après la déclaration de ue
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à
cause de l'unicode qui code sur 2 octets.... re snif...
"news.microsoft.com" <nsolsapvaemrgne@npooswpearm-m.fr> a écrit dans le
message de news: OHgf8ZNpGHA.1140@TK2MSFTNGP05.phx.gbl...
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne
pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà
encodé en unicode.
J'ai fait ainsi :
Dans la class Raindoll,
Dans la fonction
Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat
Return encrypted
par ceci :
' Qu'on retourne en guise de resultat
' Return encrypted
'en base 64
Dim encrypted_bytes As Byte()
For i As Integer = 1 To encrypted.Length
encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1)))
Next
Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal
Dim encrypted_bytes As Byte()
encrypted_bytes = Convert.FromBase64String(encrypted)
encrypted = ""
For Each encrypted_byte As Byte In encrypted_bytes
encrypted &= Chr(encrypted_byte)
Next
"Fred" <foleide@libre.france> a écrit dans le message de news:
O06avlMpGHA.3288@TK2MSFTNGP03.phx.gbl...
Dans : news:%237lHAdMpGHA.4848@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et
donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et
fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre
autres), enregistre tes chaînes cryptées en les encodant en base64.
(voir System.Convert)
Dans décrypt, le mieux est de mettre uniquement cette ligne : encrypted = UE.GetString(Convert.FromBase64String(encrypted))
juste après la déclaration de ue
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
"news.microsoft.com" a écrit dans le message de news:
J'ai essayé sans succès d'encoder en base64.
Il est bien possible que je m'y sois mal pris... mais cela ne fonctionne pas, j'ai maintenant un problème d'encryptage.
Je pense que ce nouveau problème vienne du fait que le cryptage soit déjà encodé en unicode.
J'ai fait ainsi : Dans la class Raindoll, Dans la fonction Public Function EncryptText(ByVal original As String) As String
Je remplace ceci :
' Qu'on retourne en guise de resultat Return encrypted
par ceci :
' Qu'on retourne en guise de resultat ' Return encrypted 'en base 64 Dim encrypted_bytes As Byte() For i As Integer = 1 To encrypted.Length encrypted_bytes(i) = CByte(Asc(Mid(encrypted, i, 1))) Next Return Convert.ToBase64String(encrypted_bytes)
Puis, dans la fonction :
Public Function DecryptText(ByVal encrypted As String) As String
Je rajoute tout au début :
'reconversion de la base64 en normal Dim encrypted_bytes As Byte() encrypted_bytes = Convert.FromBase64String(encrypted) encrypted = "" For Each encrypted_byte As Byte In encrypted_bytes encrypted &= Chr(encrypted_byte) Next
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
Bonjour,
Bonjour,
En effet, je lis mon fichier (unicode) crypté ligne par ligne, et donc, la chaîne cryptée se retrouve dans ce cas sur 2 lignes et fausse par conséquent le décryptage de 2 facons différentes :
Si ton cryptage génère des caractères non imprimables (10 et 13 entre autres), enregistre tes chaînes cryptées en les encodant en base64. (voir System.Convert)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Fred
Dans : news:% news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Dans : news:%23fwyLIOpGHA.4236@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la
chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par
une représentation en chaîne ?
À priori les fonctions de cryptage travaillent sur des tableaux
d'octets.
Tu peux directement passer de l'encodage base64 au tableau d'octets et
vice-versa.
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
news.microsoft.com
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue chaine, et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32 milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue chaine,
et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette nuit
(sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il devrait
en avoir fait que 20 milles) de phrases longues de jusqu'à 32 milles
caractères chacune...
Bref... résultat demain
Stéphane
"Fred" <foleide@libre.france> a écrit dans le message de news:
u3t08lOpGHA.2292@TK2MSFTNGP05.phx.gbl...
Dans : news:%23fwyLIOpGHA.4236@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la
chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par
une représentation en chaîne ?
À priori les fonctions de cryptage travaillent sur des tableaux d'octets.
Tu peux directement passer de l'encodage base64 au tableau d'octets et
vice-versa.
Je suis en train de tester en remplacant le caractère par 1 longue chaine, et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32 milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Stéphane
(désolé, je viens de remarquer que j'ai mis le serveur de news à la place du nom :x)
"news.microsoft.com" a écrit dans le message de news: %
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue chaine, et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32 milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
(désolé, je viens de remarquer que j'ai mis le serveur de news à la place du
nom :x)
"news.microsoft.com" <nsolsapvaemrgne@npooswpearm-m.fr> a écrit dans le
message de news: %23CamwBQpGHA.2464@TK2MSFTNGP03.phx.gbl...
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue chaine,
et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette
nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il
devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32
milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" <foleide@libre.france> a écrit dans le message de news:
u3t08lOpGHA.2292@TK2MSFTNGP05.phx.gbl...
Dans : news:%23fwyLIOpGHA.4236@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la
chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par
une représentation en chaîne ?
À priori les fonctions de cryptage travaillent sur des tableaux d'octets.
Tu peux directement passer de l'encodage base64 au tableau d'octets et
vice-versa.
(désolé, je viens de remarquer que j'ai mis le serveur de news à la place du nom :x)
"news.microsoft.com" a écrit dans le message de news: %
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue chaine, et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32 milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Stéphane
Bon, bin... pb réglé...
"Stéphane" a écrit dans le message de news: %
(désolé, je viens de remarquer que j'ai mis le serveur de news à la place du nom :x)
"news.microsoft.com" a écrit dans le message de news: %
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue chaine, et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32 milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Bon, bin... pb réglé...
"Stéphane" <nsolsapvaemrgne@npooswpearm-m.fr> a écrit dans le message de
news: %234iIiGQpGHA.2360@TK2MSFTNGP05.phx.gbl...
(désolé, je viens de remarquer que j'ai mis le serveur de news à la place
du nom :x)
"news.microsoft.com" <nsolsapvaemrgne@npooswpearm-m.fr> a écrit dans le
message de news: %23CamwBQpGHA.2464@TK2MSFTNGP03.phx.gbl...
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue
chaine, et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette
nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il
devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32
milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" <foleide@libre.france> a écrit dans le message de news:
u3t08lOpGHA.2292@TK2MSFTNGP05.phx.gbl...
Dans : news:%23fwyLIOpGHA.4236@TK2MSFTNGP03.phx.gbl
news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la
chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par
une représentation en chaîne ?
À priori les fonctions de cryptage travaillent sur des tableaux
d'octets.
Tu peux directement passer de l'encodage base64 au tableau d'octets et
vice-versa.
(désolé, je viens de remarquer que j'ai mis le serveur de news à la place du nom :x)
"news.microsoft.com" a écrit dans le message de news: %
Je ne sais pas trop, je regarderais mieux...
Je suis en train de tester en remplacant le caractère par 1 longue chaine, et si je détecte cette longue chaine, je remet le caractère.
Ca a l'air de fonctionner... mais je vais laisser l'ordi tourner cette nuit (sans le réseau) pour tester jusqu'à 2 milliards (mais en fait, il devrait en avoir fait que 20 milles) de phrases longues de jusqu'à 32 milles caractères chacune...
Bref... résultat demain
Stéphane
"Fred" a écrit dans le message de news:
Dans : news:% news.microsoft.com écrit :
mais maintenant, je n'ai que la moitié de mes caractères dans la chaine... à cause de l'unicode qui code sur 2 octets.... re snif...
Re,
Je n'ai pas regardé dans le détail mais est-il nécessaire de passer par une représentation en chaîne ? À priori les fonctions de cryptage travaillent sur des tableaux d'octets. Tu peux directement passer de l'encodage base64 au tableau d'octets et vice-versa.