🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)
🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)

🔧 Programmierung 🕛 kürzlich 4 Min Lesezeit
0

De C# a Go: Logrando Compatibilidad en Codificación AES y Base64

↗ Quelle (dev.to)
🗣️ Stimme:

Hace un par de semanas me enfrenté a un problema interesante: tenía que migrar un algoritmo de cifrado AES de C# a Go. En la implementación en Go ya teníamos un algoritmo de cifrado AES, pero no era compatible con la implementación en C#, y varias pruebas fallaban porque los resultados no coincidían, principalmente en el último carácter.



El problema era que no tenía el código fuente de la implementación en C#, solo el binario, una DLL que se usaba en el proyecto de .NET.



Intenté obtener el código fuente de la implementación en C#, pero no tuve éxito. Al ser un proyecto antiguo, no había documentación disponible. Afortunadamente, mi jefe fue quien desarrolló esta implementación, pero no recordaba los detalles exactos. Sin embargo, sí sabía que al final del proceso de cifrado AES se utilizaba una función para codificar en base64.



Con esta pista, abrí el proyecto en .NET e instalé la extensión de JetBrains para descompilar el código fuente, y obtuve el código de la librería que se usaba para cifrar la información.



Finalmente, descubrí que el problema no residía en el algoritmo de cifrado AES, sino en la codificación en base64.



En el código de C#, al final del proceso de cifrado AES, se usaba la siguiente función para la codificación en base64: HttpServerUtility.UrlTokenEncode.



La función UrlTokenEncode es una función de .NET que codifica una matriz de bytes en una cadena de texto base64 para su transmisión en una URL. Esta función realiza tres acciones clave que explican la diferencia en los resultados:




  1. Codificación en Base64 segura para URLs (URL-safe): Usa una variante de Base64 que es apta para URLs, reemplazando los caracteres + por - y / por _.


  2. Eliminación de caracteres de relleno: La función elimina los caracteres de relleno = que se suelen utilizar en la codificación estándar de Base64.


  3. Adición de un número al final: La función añade un número al final de la cadena para indicar cuántos caracteres de relleno se eliminaron.




Todo esto lo descubrí gracias a ChatGPT, no porque sea un experto en base64. Con esta información, pude modificar la implementación en Go para que fuera compatible con la de C#.



En Go, después de cifrar la información con AES, la codificación en base64 se realiza de la siguiente manera:




CODE
encode := base64.RawURLEncoding.EncodeToString(paddedBytes)






Y, finalmente, se añade el número de caracteres de relleno eliminados al final de la cadena:




CODE
// Calcular el número de caracteres de relleno (`=`) que se habrían añadido
paddingCount := (4 - len(paddedBytes)%3) % 4

// Añadir el conteo de relleno al final de la cadena codificada (como hace UrlTokenEncode de C#)
if paddingCount > 0 {
encoded += strconv.Itoa(paddingCount)
}






En la línea paddingCount := (4 - len(paddedBytes)%3) % 4, se calcula el número de caracteres de relleno (=) que luego se añaden al final de la cadena codificada en base64:





  • len(paddedBytes)%3 calcula la cantidad de bytes que no se han codificado en base64.


  • (4 - len(paddedBytes)%3) % 4 calcula cuántos caracteres de relleno faltan para que la longitud sea divisible por 4. Si no se necesita relleno, el resultado es 0.



En resumen, el problema no era el algoritmo de cifrado AES, sino la codificación en base64. Gracias a la información obtenida de ChatGPT, pude modificar la implementación en Go para que fuera compatible con la de C#. En este caso, el uso de ChatGPT fue muy útil, ya que me ahorró un montón de tiempo y dolores de cabeza; eso sí, tuve que ir ajustando cada respuesta hasta igualar los resultados de ambas implementaciones.

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
3 Quellen
GPT-6 Astra Release Today? OpenAI’s Next Major AI Model Is Almost Here
1 Quelle
Apple accuses OpenAI of destroying evidence as trade-secrets fight intensifies
1 Quelle
Major AI platforms go down in unprecedented simultaneous outage
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten De C# a Go: Logrando Compatibilidad en Codificación AES y Base64

Thematisch verwandte Begriffe: Logrando, Compatibilidad, Codificación, Base64 · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...