https://es.bitcoin.it/w/index.php?title=Codificaci%C3%B3n_Base58Check&feed=atom&action=history
Codificación Base58Check - Historial de revisiones
2024-03-29T09:56:34Z
Historial de revisiones para esta página en el wiki
MediaWiki 1.30.0
https://es.bitcoin.it/w/index.php?title=Codificaci%C3%B3n_Base58Check&diff=315&oldid=prev
Nubarius: typo
2012-12-12T16:39:03Z
<p>typo</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="es">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Revisión anterior</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revisión del 16:39 12 dic 2012</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l20" >Línea 20:</td>
<td colspan="2" class="diff-lineno">Línea 20:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>- El doble clic seleccionará el número completo como una sola palabra si todo es alfanumérico.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>- El doble clic seleccionará el número completo como una sola palabra si todo es alfanumérico.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>==<del class="diffchange diffchange-inline">Caracterísitcas </del>de Base58Check==</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>==<ins class="diffchange diffchange-inline">Características </ins>de Base58Check==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Base58Check presenta las siguientes características:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Base58Check presenta las siguientes características:</div></td></tr>
</table>
Nubarius
https://es.bitcoin.it/w/index.php?title=Codificaci%C3%B3n_Base58Check&diff=309&oldid=prev
Nubarius: Revisión
2012-12-12T15:59:41Z
<p>Revisión</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="es">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Revisión anterior</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revisión del 15:59 12 dic 2012</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1" >Línea 1:</td>
<td colspan="2" class="diff-lineno">Línea 1:</td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Las [[Dirección|direcciones Bitcoin]] se codifican mediante una forma modificada de la [http://<del class="diffchange diffchange-inline">en</del>.wikipedia.org/wiki/<del class="diffchange diffchange-inline">Binary-to-text_encoding binary-to-text </del>codificación] Base 58 a la que se conoce como '''Base58Check'''.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Las [[Dirección|direcciones Bitcoin]] se codifican mediante una forma modificada de la [http://<ins class="diffchange diffchange-inline">es</ins>.wikipedia.org/wiki/<ins class="diffchange diffchange-inline">Codificaci%C3%B3n_de_binario_a_texto </ins>codificación] Base 58 a la que se conoce como '''Base58Check'''.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>De manera general, la codificación Base58Check se utiliza para codificar secuencias de bytes utilizadas en Bitcoin en un formato <del class="diffchange diffchange-inline">de cadenas </del>de texto <del class="diffchange diffchange-inline">legibles </del>para el ser humano. Una dirección Bitcoin es simplemente una cadena de texto codificada como Base58Check que contiene unos datos útiles de 20 bytes, que consisten en el ''hash'' de la [[clave pública]] asociada con la dirección.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>De manera general, la codificación Base58Check se utiliza para codificar secuencias de bytes utilizadas en Bitcoin <ins class="diffchange diffchange-inline">convirtiéndolas </ins>en un formato de texto <ins class="diffchange diffchange-inline">legible </ins>para el ser humano. Una dirección Bitcoin es simplemente una cadena de texto codificada como Base58Check que contiene unos datos útiles de 20 bytes <ins class="diffchange diffchange-inline">de longitud</ins>, que consisten en el ''hash'' de la [[clave pública]] asociada con la dirección.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>En el código fuente del cliente original de Bitcoin, [[Satoshi Nakamoto]] comentó la justificación del uso de Base58Check:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>En el código fuente del cliente original de Bitcoin, [[Satoshi Nakamoto]] comentó la justificación del uso de Base58Check:</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l21" >Línea 21:</td>
<td colspan="2" class="diff-lineno">Línea 21:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Caracterísitcas de Base58Check==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Caracterísitcas de Base58Check==</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Base58Check presenta las siguientes características:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Base58Check presenta las siguientes características:</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* <del class="diffchange diffchange-inline">Unos datos </del>útiles de tamaño arbitrario.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* <ins class="diffchange diffchange-inline">Datos </ins>útiles de tamaño arbitrario.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Un conjunto de 58 símbolos alfanuméricos que incluyen letras minúsculas y mayúsculas fácilmente distinguibles (no se utilizan 0OIl).</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Un conjunto de 58 símbolos alfanuméricos que incluyen letras minúsculas y mayúsculas fácilmente distinguibles (no se utilizan 0OIl).</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Un byte de información de versión/aplicación. Las direcciones Bitcoin utilizan 0x00 para este byte <del class="diffchange diffchange-inline">(en el futuro se podría utilizar </del>0x05<del class="diffchange diffchange-inline">)</del>.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Un byte de información de versión/aplicación. Las direcciones Bitcoin <ins class="diffchange diffchange-inline">tradicionales </ins>utilizan 0x00 para este byte<ins class="diffchange diffchange-inline">. Las nuevas direcciones que permiten multifirma utilizan </ins>0x05.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Cuatro bytes (32 bits) de un código de comprobación de errores basado en SHA-256. Este código puede emplearse para detectar automáticamente e incluso corregir errores tipográficos.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Cuatro bytes (32 bits) de un código de comprobación de errores basado en SHA-256. Este código puede emplearse para detectar automáticamente e incluso corregir errores tipográficos.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Un paso adicional para preservar los ceros iniciales de los datos.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Un paso adicional para preservar los ceros iniciales de los datos.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Cómo crear una cadena Base58Check==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Cómo crear una cadena Base58Check==</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Una cadena de texto Base58Check se crea a partir de un byte de versión/aplicación de la manera siguiente:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Una cadena de texto Base58Check se crea a partir de un byte de versión/aplicación de la manera siguiente:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># Tomar el byte de versión/aplicación y los bytes de los datos útiles y concatenarlos (como bytes).</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># Tomar el byte de versión/aplicación y los bytes de los datos útiles y concatenarlos (como bytes).</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Calcular SHA256(SHA256(resultado paso 1)), aplicación reiterada por dos veces del <del class="diffchange diffchange-inline">algortimo </del>de ''hash'' <del class="diffchange diffchange-inline">SHA256 </del>y quedarse con los cuatro primeros bytes.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Calcular SHA256(SHA256(resultado paso 1)), aplicación reiterada por dos veces del <ins class="diffchange diffchange-inline">algoritmo </ins>de ''hash'' <ins class="diffchange diffchange-inline">SHA-256, </ins>y quedarse con los cuatro primeros bytes.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># Concatenar los resultados del paso 1 y el paso 2 (como bytes).</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># Concatenar los resultados del paso 1 y el paso 2 (como bytes).</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Considerar <del class="diffchange diffchange-inline">el </del>resultado del paso 3<del class="diffchange diffchange-inline">, una secuencia de bytes, </del>como un ''bignumber'' único en formato ''big-endian''<del class="diffchange diffchange-inline">, </del>convertirlo a base-58 utilizando transformaciones matemáticas normales(división de ''bignumbers'') y el alfabeto de base-58 descrito más abajo. Normalizar el resultado para que no tenga ceros de base-58 (el carácter '1') iniciales.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Considerar <ins class="diffchange diffchange-inline">la secuencia de bytes </ins>resultado del paso 3 como un ''bignumber'' único en formato ''big-endian'' <ins class="diffchange diffchange-inline">y </ins>convertirlo a base-58 utilizando transformaciones matemáticas normales(división de ''bignumbers'') y el alfabeto de base-58 descrito más abajo. Normalizar el resultado para que no tenga ceros de base-58 (el carácter '1') iniciales.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># El carácter inicial '1', que corresponde al valor cero en base58, se reserva para representar un '''byte''' cero inicial, al <del class="diffchange diffchange-inline">proncipio </del>de los datos y no tiene valor como símbolo base-58. Puede haber uno o más caracteres '1' iniciales para representar uno o más ceros iniciales. Contar el número de bytes cero <del class="diffchange diffchange-inline">inicialesque </del>han aparecido en el resultado del paso 3 (para las direcciones Bitcoin antiguas siempre habrá al menos uno para el byte de versión/aplicación; para las direcciones <del class="diffchange diffchange-inline">nuevas </del>no habrá ninguno). <del class="diffchange diffchange-inline">Cade </del>byte cero inicial estará representado por un '1' en el resultado final.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># El carácter inicial '1', que corresponde al valor cero en base58, se reserva para representar un '''byte''' cero inicial, al <ins class="diffchange diffchange-inline">principio </ins>de los datos<ins class="diffchange diffchange-inline">, </ins>y no tiene valor como símbolo base-58. Puede haber uno o más caracteres '1' iniciales para representar uno o más ceros iniciales. Contar el número de bytes cero <ins class="diffchange diffchange-inline">iniciales que </ins>han aparecido en el resultado del paso 3 (para las direcciones Bitcoin antiguas siempre habrá al menos uno para el byte de versión/aplicación; para las direcciones <ins class="diffchange diffchange-inline">del formato multifirma más nuevo </ins>no habrá ninguno). <ins class="diffchange diffchange-inline">Cada </ins>byte cero inicial estará representado por un '1' en el resultado final.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Concatenar los caracteres '1' del paso 5 con los resultados del paso 4. <del class="diffchange diffchange-inline"> </del>'''Se obtiene así el resultado Base58Check.'''</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Concatenar los caracteres '1' del paso 5 con los resultados del paso 4. '''Se obtiene así el resultado Base58Check.'''</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Cómo codificar una dirección Bitcoin==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Cómo codificar una dirección Bitcoin==</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l42" >Línea 42:</td>
<td colspan="2" class="diff-lineno">Línea 44:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>las direcciones Bitcoin son el resultado de aplicar la codificación Base58Check al valor ''hash'' del [[script]] asociado. En concreto, es Base58Check(5,[[RIPEMD160]]([[SHA256]]([[script]]))), con las siguientes restricciones:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>las direcciones Bitcoin son el resultado de aplicar la codificación Base58Check al valor ''hash'' del [[script]] asociado. En concreto, es Base58Check(5,[[RIPEMD160]]([[SHA256]]([[script]]))), con las siguientes restricciones:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [[RIPEMD160]] y [[SHA256]] en este caso son siempre exactamente 20 y 32 bytes sin signo respectivamente. Están en formato ''big-endian'' (el byte más significativo en primer lugar). Han de evitarse implementaciones de valores [[bignumber]] que recortan los <del class="diffchange diffchange-inline">butes </del>nulos 0x00 iniciales o que agregan bytes nulos 0x00 al final para indicar el signo. El código ha de manejar bien estos casos o, de lo contrario, se generarían direcciones <del class="diffchange diffchange-inline">que parecerían </del>válidas pero cuyos saldos nunca podrían ser gastados, con lo que se perderían <del class="diffchange diffchange-inline">esos </del>fondos para siempre.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* [[RIPEMD160]] y [[SHA256]] en este caso son siempre exactamente 20 y 32 bytes sin signo respectivamente. Están en formato ''big-endian'' (el byte más significativo en primer lugar). Han de evitarse implementaciones de valores [[bignumber]] que recortan los <ins class="diffchange diffchange-inline">bytes </ins>nulos 0x00 iniciales o que agregan bytes nulos 0x00 al final para indicar el signo. El código ha de manejar bien estos casos o, de lo contrario, se generarían direcciones <ins class="diffchange diffchange-inline">aparentemente </ins>válidas pero cuyos saldos nunca podrían ser gastados, con lo que se perderían <ins class="diffchange diffchange-inline">sus </ins>fondos para siempre.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* El 0 se usa como byte de versión/aplicación.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* El 0 se usa como byte de versión/aplicación.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Las direcciones Bitcoin multifirma que utilizan un byte de versión/aplicación 0x05 cominezan siempre con la cifra '3'.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Las <ins class="diffchange diffchange-inline">nuevas </ins>direcciones Bitcoin multifirma que utilizan un byte de versión/aplicación 0x05 cominezan siempre con la cifra '3'.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Cómo codificar una clave privada==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Cómo codificar una clave privada==</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l53" >Línea 53:</td>
<td colspan="2" class="diff-lineno">Línea 55:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Tabla de símbolos Base58==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Tabla de símbolos Base58==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>La tabla de símbolos Base58 utilizada por Bitcoin es específica del proyecto Bitcoin y no <del class="diffchange diffchange-inline">pretende </del>ser igual a la de otras implementaciones de Base58 utilizadas fuera del contexto de Bitcoin.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>La tabla de símbolos Base58 utilizada por Bitcoin es específica del proyecto Bitcoin y no <ins class="diffchange diffchange-inline">tiene por qué </ins>ser igual a la de otras implementaciones de Base58 utilizadas fuera del contexto de Bitcoin.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>{| class="wikitable"  </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>{| class="wikitable"  </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>|-</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>|-</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l256" >Línea 256:</td>
<td colspan="2" class="diff-lineno">Línea 258:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>|}</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>|}</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>En [[Lista de prefijos de direcciones]] se muestra una lista más <del class="diffchange diffchange-inline">completa</del>.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>En [[Lista de prefijos de direcciones]] se muestra una lista más <ins class="diffchange diffchange-inline">exhaustiva</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Fuente ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Fuente ==</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l262" >Línea 262:</td>
<td colspan="2" class="diff-lineno">Línea 264:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Funciones relacionadas en el código fuente ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Funciones relacionadas en el código fuente ==</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* inline string EncodeBase58Check(const vector<unsigned char>& vchIn)</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* inline string EncodeBase58Check(const vector<unsigned char>& vchIn)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* inline bool DecodeBase58Check(const char* psz, vector<unsigned char>& vchRet)</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* inline bool DecodeBase58Check(const char* psz, vector<unsigned char>& vchRet)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* inline bool DecodeBase58Check(const string& str, vector<unsigned char>& vchRet)</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* inline bool DecodeBase58Check(const string& str, vector<unsigned char>& vchRet)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[Categoría:<del class="diffchange diffchange-inline">Téchnica</del>]]</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[Categoría:<ins class="diffchange diffchange-inline">Técnica</ins>]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[en:Base58Check encoding]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[en:Base58Check encoding]]</div></td></tr>
</table>
Nubarius
https://es.bitcoin.it/w/index.php?title=Codificaci%C3%B3n_Base58Check&diff=308&oldid=prev
Nubarius: Traducción de artículo completo de la wiki inglesa
2012-12-12T15:51:14Z
<p>Traducción de artículo completo de la wiki inglesa</p>
<p><b>Página nueva</b></p><div>Las [[Dirección|direcciones Bitcoin]] se codifican mediante una forma modificada de la [http://en.wikipedia.org/wiki/Binary-to-text_encoding binary-to-text codificación] Base 58 a la que se conoce como '''Base58Check'''.<br />
<br />
De manera general, la codificación Base58Check se utiliza para codificar secuencias de bytes utilizadas en Bitcoin en un formato de cadenas de texto legibles para el ser humano. Una dirección Bitcoin es simplemente una cadena de texto codificada como Base58Check que contiene unos datos útiles de 20 bytes, que consisten en el ''hash'' de la [[clave pública]] asociada con la dirección.<br />
<br />
En el código fuente del cliente original de Bitcoin, [[Satoshi Nakamoto]] comentó la justificación del uso de Base58Check:<br />
<br />
base58.h:<br />
// Why base-58 instead of standard base-64 encoding?<br />
// - Don't want 0OIl characters that look the same in some fonts and<br />
// could be used to create visually identical looking account numbers.<br />
// - A string with non-alphanumeric characters is not as easily accepted as an account number.<br />
// - E-mail usually won't line-break if there's no punctuation to break at.<br />
// - Doubleclicking selects the whole number as one word if it's all alphanumeric.<br />
<br />
Traducción:<br />
¿Por qué codificación base-58 en lugar del estándar base-64?<br />
- No queremos los caracteres 0OIl que parecen iguales en algunas fuentes y que podrían utilizarse para crear números de cuenta visualmente idénticos.<br />
- Una cadena de texto con caracteres no alfanuméricos no tendría tan fácil aceptación como un número de cuenta.<br />
- El correo electrónico no introducirá saltos de línea si no hay signos de puntuación por los que que cortar.<br />
- El doble clic seleccionará el número completo como una sola palabra si todo es alfanumérico.<br />
<br />
==Caracterísitcas de Base58Check==<br />
Base58Check presenta las siguientes características:<br />
* Unos datos útiles de tamaño arbitrario.<br />
* Un conjunto de 58 símbolos alfanuméricos que incluyen letras minúsculas y mayúsculas fácilmente distinguibles (no se utilizan 0OIl).<br />
* Un byte de información de versión/aplicación. Las direcciones Bitcoin utilizan 0x00 para este byte (en el futuro se podría utilizar 0x05).<br />
* Cuatro bytes (32 bits) de un código de comprobación de errores basado en SHA-256. Este código puede emplearse para detectar automáticamente e incluso corregir errores tipográficos.<br />
* Un paso adicional para preservar los ceros iniciales de los datos.<br />
<br />
==Cómo crear una cadena Base58Check==<br />
Una cadena de texto Base58Check se crea a partir de un byte de versión/aplicación de la manera siguiente:<br />
# Tomar el byte de versión/aplicación y los bytes de los datos útiles y concatenarlos (como bytes).<br />
# Calcular SHA256(SHA256(resultado paso 1)), aplicación reiterada por dos veces del algortimo de ''hash'' SHA256 y quedarse con los cuatro primeros bytes.<br />
# Concatenar los resultados del paso 1 y el paso 2 (como bytes).<br />
# Considerar el resultado del paso 3, una secuencia de bytes, como un ''bignumber'' único en formato ''big-endian'', convertirlo a base-58 utilizando transformaciones matemáticas normales(división de ''bignumbers'') y el alfabeto de base-58 descrito más abajo. Normalizar el resultado para que no tenga ceros de base-58 (el carácter '1') iniciales.<br />
# El carácter inicial '1', que corresponde al valor cero en base58, se reserva para representar un '''byte''' cero inicial, al proncipio de los datos y no tiene valor como símbolo base-58. Puede haber uno o más caracteres '1' iniciales para representar uno o más ceros iniciales. Contar el número de bytes cero inicialesque han aparecido en el resultado del paso 3 (para las direcciones Bitcoin antiguas siempre habrá al menos uno para el byte de versión/aplicación; para las direcciones nuevas no habrá ninguno). Cade byte cero inicial estará representado por un '1' en el resultado final.<br />
# Concatenar los caracteres '1' del paso 5 con los resultados del paso 4. '''Se obtiene así el resultado Base58Check.'''<br />
<br />
==Cómo codificar una dirección Bitcoin==<br />
Una [[dirección]] Bitcoin está basada en un [[par de claves]] criptográficas [[ECDSA]] con parámetro de curva elíptica [[secp256k1]].<br />
<br />
las direcciones Bitcoin son el resultado de aplicar la codificación Base58Check al valor ''hash'' del [[script]] asociado. En concreto, es Base58Check(5,[[RIPEMD160]]([[SHA256]]([[script]]))), con las siguientes restricciones:<br />
<br />
* [[RIPEMD160]] y [[SHA256]] en este caso son siempre exactamente 20 y 32 bytes sin signo respectivamente. Están en formato ''big-endian'' (el byte más significativo en primer lugar). Han de evitarse implementaciones de valores [[bignumber]] que recortan los butes nulos 0x00 iniciales o que agregan bytes nulos 0x00 al final para indicar el signo. El código ha de manejar bien estos casos o, de lo contrario, se generarían direcciones que parecerían válidas pero cuyos saldos nunca podrían ser gastados, con lo que se perderían esos fondos para siempre.<br />
* El 0 se usa como byte de versión/aplicación.<br />
<br />
Las direcciones Bitcoin multifirma que utilizan un byte de versión/aplicación 0x05 cominezan siempre con la cifra '3'.<br />
<br />
==Cómo codificar una clave privada==<br />
<br />
La codificación Base58Check se utiliza también para codificar [[clave privada|claves privadas]] en el [[formato de importación de monedero]]. Este se forma exactamente igual que una dirección Bitcoin, excepto en que se utiliza 0x80 como byte de versión/aplicación y los datos útiles constan de 32 bytes en lugar de 20 (una clave privada en Bitcoin es un único entero de 32 bytes en formato ''big-endian''). Este tipo de codificación da lugar siempre a una cadena de 51 caracteres que comienza por '5', o más concretamente '5H', '5J', o '5K'.<br />
<br />
==Tabla de símbolos Base58==<br />
<br />
La tabla de símbolos Base58 utilizada por Bitcoin es específica del proyecto Bitcoin y no pretende ser igual a la de otras implementaciones de Base58 utilizadas fuera del contexto de Bitcoin.<br />
{| class="wikitable" <br />
|-<br />
!Valor<br />
!Carácter<br />
!Valor<br />
!Carácter<br />
!Valor<br />
!Carácter<br />
!Valor<br />
!Carácter<br />
|-<br />
|0<br />
|1<br />
|1<br />
|2<br />
|2<br />
|3<br />
|3<br />
|4<br />
|-<br />
|4<br />
|5<br />
|5<br />
|6<br />
|6<br />
|7<br />
|7<br />
|8<br />
|-<br />
|8<br />
|9<br />
|9<br />
|A<br />
|10<br />
|B<br />
|11<br />
|C<br />
|-<br />
|12<br />
|D<br />
|13<br />
|E<br />
|14<br />
|F<br />
|15<br />
|G<br />
|-<br />
|16<br />
|H<br />
|17<br />
|J<br />
|18<br />
|K<br />
|19<br />
|L<br />
|-<br />
|20<br />
|M<br />
|21<br />
|N<br />
|22<br />
|P<br />
|23<br />
|Q<br />
|-<br />
|24<br />
|R<br />
|25<br />
|S<br />
|26<br />
|T<br />
|27<br />
|U<br />
|-<br />
|28<br />
|V<br />
|29<br />
|W<br />
|30<br />
|X<br />
|31<br />
|Y<br />
|-<br />
|32<br />
|Z<br />
|33<br />
|a<br />
|34<br />
|b<br />
|35<br />
|c<br />
|-<br />
|36<br />
|d<br />
|37<br />
|e<br />
|38<br />
|f<br />
|39<br />
|g<br />
|-<br />
|40<br />
|h<br />
|41<br />
|i<br />
|42<br />
|j<br />
|43<br />
|k<br />
|-<br />
|44<br />
|m<br />
|45<br />
|n<br />
|46<br />
|o<br />
|47<br />
|p<br />
|-<br />
|48<br />
|q<br />
|49<br />
|r<br />
|50<br />
|s<br />
|51<br />
|t<br />
|-<br />
|52<br />
|u<br />
|53<br />
|v<br />
|54<br />
|w<br />
|55<br />
|x<br />
|-<br />
|56<br />
|y<br />
|57<br />
|z<br />
|}<br />
<br />
El algoritmo para codificar address_byte_string (consistente en 0x01 + hash + 4-byte_check_code) es:<br />
<br />
code_string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"<br />
x = convert_bytes_to_big_integer(hash_result)<br />
<br />
output_string = ""<br />
<br />
while(x > 0) <br />
{<br />
(x, remainder) = divide(x, 58)<br />
output_string.append(code_string[remainder])<br />
}<br />
<br />
repeat(number_of_leading_zero_bytes_in_hash)<br />
{<br />
output_string.append(code_string[0]);<br />
}<br />
<br />
output_string.reverse();<br />
<br />
==Bytes de versión==<br />
<br />
En la tabla siguiente se indican algunos valores de bytes utilizados para diferenciar versiones:<br />
<br />
{| class="wikitable" <br />
|-<br />
!Versión decimal<br />
!Símbolo inicial<br />
!Uso<br />
|-<br />
|0<br />
|1<br />
|Hash de la clave pública Bitcoin<br />
|-<br />
|5<br />
|3<br />
|Hash del script Bitcoin<br />
|-<br />
|21<br />
|4<br />
|Clave pública (compacta) Bitcoin (propuesta)<br />
|-<br />
|52<br />
|M o N<br />
|Hash de la clave pública Namecoin<br />
|-<br />
|128<br />
|5<br />
|Clave privada<br />
|-<br />
|111<br />
|m o n<br />
|Hash de la clave pública Bitcoin en testnet<br />
|-<br />
|196<br />
|2<br />
|Hash del script Bitcoin en testnet<br />
|}<br />
<br />
En [[Lista de prefijos de direcciones]] se muestra una lista más completa.<br />
<br />
== Fuente ==<br />
https://github.com/bitcoin/bitcoin/blob/master/src/base58.h<br />
<br />
== Funciones relacionadas en el código fuente ==<br />
* inline string EncodeBase58Check(const vector<unsigned char>& vchIn)<br />
* inline bool DecodeBase58Check(const char* psz, vector<unsigned char>& vchRet)<br />
* inline bool DecodeBase58Check(const string& str, vector<unsigned char>& vchRet)<br />
<br />
[[Categoría:Téchnica]]<br />
<br />
[[en:Base58Check encoding]]</div>
Nubarius