J'ai developpé ce code dans le cadre du décodage des multiparts des posts du reseau Usenet.
Je metterai bientot en ligne la version d'encodage
Source / Exemple :
Public Function DecodeYenc(ByVal _Encoded() As Byte) as Byte()
Dim _Decoded(),nbit As Byte 'Conteneur des bytes décodés
Dim _Pos = 0 as Integer 'Increment de position du buffer
Dim _special as boolean = False 'Special permet de sauter la position actuelle du buffer et de passer a un calcul different pour le prochain byte
For Each _bit In _Encoded
Array.Resize(_Decoded, _Pos + 1) 'A chaque passage on modifie la taille du buffer de sortie
If (_special) Then 'La boucle précédente à decouvert un caractere spéciale
nbit = ((_bit + 256) - 106) Mod 256 'Calcul
_Decoded(_Pos) = nbit 'On implémante au nouvelle coordonées le byte calculé
_Pos += 1 'Incrementation du BufferSize
_special = False 'On remet Special a 0
ElseIf (_bit = 61) Then 'Dectection d'un caractere spécial on passe _special a true
_special = True
Else
nbit = ((_bit + 256) - 42) Mod 256 'Calcul
_Decoded(_Pos) = nbit 'On implémante au nouvelle coordonées le byte calculé
_Pos += 1 'Incrementation du BufferSize
End If
Next
Return _Decoded
End Function
Conclusion :
Très simple a utilisé on envoi le buffer codé et on le récupère décodé
Ex :
Dim Decodé= DecodeYenc(Encodé)
Testé avec de nombreuse source codé 100% de comparaison positive avec un contenu decrypté, testé jusqu'a 250ko en entrée