Implémentation JAVA de base64_encode et base64_decode
Base64 est l'une des méthodes de codage les plus courantes pour transmettre du code d'octet de 8 bits sur Internet. Vous pouvez consulter RFC2045~RFC2049, qui contient des spécifications détaillées pour MIME. Base64 nécessite de convertir tous les trois octets de 8 bits en quatre octets de 6 bits (3*8 = 4*6 = 24), puis d'ajouter deux 0 de poids fort au 6 bits pour former quatre octets de 8 bits, c'est-à-dire que la chaîne convertie sera théoriquement 1/3 plus long que l'original
Fonctions PHP : base64_encode() et base64_decode()
Principe d'encodage et de décodage base64
L'encodage Base64 convertit en fait 3 octets de 8 bits en 4 octets de 6 bits, (3*8 = 4*6 = 24) Ces 4 octets de six bits sont en réalité toujours 8 bits, mais deux bits supérieurs sont mis à 0. Lorsque seulement 6 bits d'un octet sont valides, son l'espace de valeurs va de 0 à 2 à la puissance 6 moins 1, soit 63, c'est-à-dire que l'espace de valeurs de chaque codage du codage Base64 converti est (0 ~ 63).
En fait, il y a beaucoup de caractères invisibles dans les codes ASCII entre 0 et 63, donc un autre mappage devrait être fait. La table de mappage est
'A' ~ 'Z' ? ~ 25)
'a' ~ 'z' ? ASCII (26 ~ 51)
'0' ~ '9' ? ' ? ASCII (62)
'/' ? ASCII (63)
De cette façon, 3 octets de 8 bits peuvent être convertis en 4 caractères visibles.
La méthode de fractionnement d'octets spécifique est : (image (le dessin n'est pas bon, comprenez l'esprit :-))
aaaaaaabb ccccdddd eeffffff //abcdef est en fait 1 ou 0, pour visualiser Si c'est clair, utilisez plutôt abcdef
~~~~~~~~ ~~~~~~~~ ~~~~~~~~
Octet 1 Octet 2 Octet 3
|| Les deux bits sont à 0.
Lorsqu'il est divisé de cette manière, le nombre d'octets dans le texte original doit être un multiple de 3. Lorsque cette condition ne peut pas être remplie, utilisez tous les octets zéro
pour compenser. Utilisez plutôt le signe = pour l'encodage Base64 lors de la conversion, c'est pourquoi certains encodages Base64 se terminent par un ou deux signes égaux
, mais il y a au plus deux signes égaux, car : si F(origine) représente le nombre d'octets du texte original, F(remain) représente
pour représenter le reste, alors
F(remain) = F(origin) MOD 3 est établi.
Donc les valeurs possibles de F(remain) sont 0,1,2
Si n = [F(origine) – F(remain)] / 3
<.>Lorsque F(remain) = 0, il est converti en codage Base64 de 4*n octets.
Lorsque F(remain) = 1, puisqu'un octet de texte original peut être divisé en deux octets codés en Base64, afin de
laisser l'encodage Base64 être un multiple de 4, donc il devrait Ajouter 2 signes égaux.
Lorsque F(remain) = 2, puisque les deux octets du texte original peuvent être divisés en trois octets codés en Base64, de la même manière,
doit être rempli avec un signe égal.
Il y aura 0 à 2 signes égal à la fin de la chaîne encodée en base64. Ces signes égal ne sont pas nécessaires au décodage, ils peuvent donc être supprimés.
Dans les listes de paramètres réseau GET et POST, ' " ne peut pas être transmis normalement, vous pouvez le remplacer par '|'
De cette façon, la chaîne encodée en base64 n'aura que '| et '/', donc après La chaîne codée en base64 ainsi traitée peut être transmise comme valeur de paramètre dans la liste des paramètres
======================= ====== ============================================= ==
Ce qui suit C'est une implémentation écrite par des étrangers :
package com.meterware.httpunit
Pour plus d'articles liés au JAVA; implémentation de base64_encode et base64_decode, veuillez faire attention au site Web PHP chinois !
/******************************************************************************************************************** <br>* $Id: Base64.java,v 1.4 2002/12/24 15:17:17 russgold Exp $ <br>* <br>* Copyright (c) 2000-2002 by Russell Gold <br>* <br>* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated <br>* documentation files (the "Software "), to deal in the Software without restriction, including without limitation <br>* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and <br>* to permit persons to whom the Software is furnished to do so, subject to the following conditions: <br>* <br>* The above copyright notice and this permission notice shall be included in all copies or substantial portions <br>* of the Software. <br>* <br>* THE SOFTWARE IS PROVIDED "AS IS ", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO <br>* THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE <br>* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF <br>* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER <br>* DEALINGS IN THE SOFTWARE. <br>* <br>*******************************************************************************************************************/ <br><br>/** <br>* A utility class to convert to and from base 64 encoding. <br>* <br>* @author <a href= "mailto:russgold@httpunit.org "> Russell Gold </a> <br>**/ <br> public class Base64 { final static String encodingChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ "; /** * Returns the base 64 encoded equivalent of a supplied string. * @param source the string to encode */ public static String encode( String source ) { char[] sourceBytes = getPaddedBytes( source ); int numGroups = (sourceBytes.length + 2) / 3; char[] targetBytes = new char[4]; char[] target = new char[ 4 * numGroups ]; for (int group = 0; group < numGroups; group++) { convert3To4( sourceBytes, group*3, targetBytes ); for (int i = 0; i < targetBytes.length; i++) { target[ i + 4*group ] = encodingChar.charAt( targetBytes[i] ); } } int numPadBytes = sourceBytes.length - source.length(); for (int i = target.length-numPadBytes; i < target.length; i++) target[i] = '= '; return new String( target ); } private static char[] getPaddedBytes( String source ) { char[] converted = source.toCharArray(); int requiredLength = 3 * ((converted.length+2) /3); char[] result = new char[ requiredLength ]; System.arraycopy( converted, 0, result, 0, converted.length ); return result; } private static void convert3To4( char[] source, int sourceIndex, char[] target ) { target[0] = (char) ( source[ sourceIndex ] > > > 2); target[1] = (char) (((source[ sourceIndex ] & 0x03) < < 4) | (source[ sourceIndex+1 ] > > > 4)); target[2] = (char) (((source[ sourceIndex+1 ] & 0x0f) < < 2) | (source[ sourceIndex+2 ] > > > 6)); target[3] = (char) ( source[ sourceIndex+2 ] & 0x3f); } /** * Returns the plaintext equivalent of a base 64-encoded string. * @param source a base 64 string (which must have a multiple of 4 characters) */ public static String decode( String source ) { if (source.length()%4 != 0) throw new RuntimeException( "valid Base64 codes have a multiple of 4 characters " ); int numGroups = source.length() / 4; int numExtraBytes = source.endsWith( "== " ) ? 2 : (source.endsWith( "= " ) ? 1 : 0); byte[] targetBytes = new byte[ 3*numGroups ]; byte[] sourceBytes = new byte[4]; for (int group = 0; group < numGroups; group++) { for (int i = 0; i < sourceBytes.length; i++) { sourceBytes[i] = (byte) Math.max( 0, encodingChar.indexOf( source.charAt( 4*group+i ) ) ); } convert4To3( sourceBytes, targetBytes, group*3 ); } return new String( targetBytes, 0, targetBytes.length - numExtraBytes ); } private static void convert4To3( byte[] source, byte[] target, int targetIndex ) { target[ targetIndex ] = (byte) (( source[0] < < 2) | (source[1] > > > 4)); target[ targetIndex+1 ] = (byte) (((source[1] & 0x0f) < < 4) | (source[2] > > > 2)); target[ targetIndex+2 ] = (byte) (((source[2] & 0x03) < < 6) | (source[3])); } }

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Cet article analyse les quatre premiers cadres JavaScript (React, Angular, Vue, Svelte) en 2025, en comparant leurs performances, leur évolutivité et leurs perspectives d'avenir. Alors que tous restent dominants en raison de fortes communautés et écosystèmes, leur populaire relatif

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Node.js 20 améliore considérablement les performances via des améliorations du moteur V8, notamment la collecte des ordures et les E / S plus rapides. Les nouvelles fonctionnalités incluent une meilleure prise en charge de Webassembly et des outils de débogage raffinés, augmentant la productivité des développeurs et la vitesse d'application.

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

Iceberg, un format de table ouverte pour les grands ensembles de données analytiques, améliore les performances et l'évolutivité du lac Data. Il aborde les limites du parquet / orc par le biais de la gestion interne des métadonnées, permettant une évolution efficace du schéma, un voyage dans le temps, un W simultanément

Cet article aborde la vulnérabilité CVE-2022-1471 dans SnakeyAml, un défaut critique permettant l'exécution du code distant. Il détaille comment la mise à niveau des applications de démarrage de printemps vers SnakeyAml 1.33 ou ultérieurement atténue ce risque, en soulignant cette mise à jour de dépendance

Cet article explore l'intégration de la programmation fonctionnelle dans Java à l'aide d'expressions Lambda, de flux API, de références de méthode et facultatif. Il met en évidence des avantages tels que l'amélioration de la lisibilité au code et de la maintenabilité grâce à la concision et à l'immuabilité

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.
