8
votes

Longueur non valide pour un tableau de charcuterie de base-64

Je reçois une "longueur invalide pour un tableau de charcuterie de base-64". À l'intérieur de l'IF () {...} sont des variations que j'ai essayé de le faire fonctionner. Il échoue dans la première ligne sans appeler déchiffrer (...) prouvant que ce n'est pas ce problème de fonctions. Je reçois la même erreur à l'intérieur avec le premier appel de déchiffrement (...). Le dernier à l'aide de l'encodage.Aclii ... me cherchera à l'intérieur de la fonction, mais il échoue à l'intérieur de la fonction. Je reçois les informations cryptées correctes de la base de données à String Ssnum. il est de la valeur est: 4 + mfetp3tpf xxx

On m'a dit d'utiliser la méthode Convert.frombase64String () et non la méthode ASCII ... Alors pourquoi est-ce échec, comment puis-je le réparer ?


2 commentaires

S'il vous plaît ne mettez pas de choses comme "c #" dans le titre. C'est ce que sont les étiquettes.


4 + MFETP3TPF ne ressemble pas à une valeur de base valide64. Il contient 11 caractères, tandis que les longueurs de valeur de base64 doivent être multiples de 4. Avec un remplissage, il devrait ressembler à 4 + mfetp3tpf = (où = est utilisé pour le rembourrage). Vous devriez vérifier comment la valeur de base64 est générée.


5 Réponses :


15
votes

Sa valeur est la valeur: 4 + MFETP3TPF

Vous recevez cette erreur car cette valeur, 4 + mfetp3tpf , est en fait pas base valide64.

est-il possible que vous manquiez simplement le caractère de remplissage requis, comme vous devez donc 4 + mfetp3tpf = ?


2 commentaires

Cela aurait un sens, dans la base de données SQL, c'est un varchar (11), donc tout '=' serait tronqué ... et cela explique également pourquoi j'ai vu tant de signes égaux parfois! J'ai vu quelque part que c'est des multiples de 4? Alors rendez mon varchar (11) à Varchar (12) .. ou plus sera la solution, non?


Oui, si votre DB tronquait, vous devez faire du terrain plus longtemps. Pas de point sur la longueur, non plus. S'il s'agit de Varchar, il n'ya aucune différence de taille entre Varchar (12) et Varchar (255) (et sur MSSQL, allant jusqu'à Varchar (4000). En effet, le champ contient un entier spécifiant la longueur du texte , plutôt que de bloquer 11 ou 12 ou 4000 caractères. Voir Wikipedia pour Spécification de base64: en.wikipedia.org/ wiki / base64



1
votes

Êtes-vous certain que vous avez une chaîne de base64? BASE64 est un moyen d'encoder des données binaires dans une chaîne tout en utilisant uniquement des caractères Standard 7 bits ASCII. C'est pas un codage de chaîne comme ASCII et a des octets de contrôle présents. Vous avez une chaîne de base64 si vous utilisez convert.tobase64string pour obtenir la valeur (qui, si vous essayez de stocker des données binaires en tant que chaîne, est votre meilleur choix)

SUITE Votre erreur (et vos données d'exemple), je suppose que vous faites pas avoir une chaîne de base64. Si vous devez stocker des données binaires dans la base de données, vous pouvez créer une colonne à l'aide d'un type binaire ou coder la chaîne dans la base64 à l'aide de convert.tobase64string . xxx

ici, de sortieData doit contenir les mêmes données que INPUTDATA .

Si ce que vous avez est juste une chaîne codée ASCII, puis Votre pratique d'origine d'utiliser system.text.encoding.ascii.getbytes () est correct, mais vous devez modifier ceci pour utiliser une chaîne de base64 si vous le pouvez.


0 commentaires

0
votes

Êtes-vous sûr que la chaîne 4 + mFetP3TP3 est une chaîne de base64 bien formée? J'ai essayé des services en ligne - personne ne pourrait le convertir.


1 commentaires

Un seul chant est insensé - essayez base64.ru ou home1.paulschou.net/tools/xlate ou OREILLEEDECKEK.COM/Dotnet/Tools/Base64Decode . Je suppose qu'une erreur s'est produite lors de la soumission de données à la base de données.



22
votes

La longueur des données de base64 doit être multiple de 4 et avec le remplissage de remplissage "= ' Vous pouvez modifier vos données en tant que données de base64 valides.

string dummyData = imgData.Trim().Replace(" ", "+");
if (dummyData.Length % 4 > 0)
dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
byte[] byteArray = Convert.FromBase64String(dummyData); 


1 commentaires

Tu as sauvé ma journée :)



-1
votes

remplacer

octet [] temp = convert.frombase64string (SSNUM);

à ce

var temp = utf8encoding.utf8.getBytes (SSNUM);


0 commentaires