可读性算法

Base64

Base64算法是一种用于将二进制数据转换为文本数据的编码方式。它由美国程序员Joe Simons在1973年创立,最初是用来将二进制数据以ASCII编码的形式传输到网络上。Base64 不是加密算法,是可读性算法,目的是提升数据的可读性。

Base64算法的原理是将三个字节的输入数据按照一定的规则划分成四个6位的片段,然后将每个6位的片段转换为对应的Base64字符。最后再在末尾加上1-2个“=”符号,以保证编码后的数据长度为4的倍数。Base64算法的编码表是由大小写字母、数字和“+”、“/”符号组成。

Python 调用

在Python中,可以使用base64模块来实现Base64算法的编码和解码。下面是一个示例代码:

import base64

# 将字符串编码为Base64
text = "Hello, World!"
encoded_text = base64.b64encode(text.encode('utf-8'))
print(encoded_text)

# 将Base64编码的字符串解码
decoded_text = base64.b64decode(encoded_text).decode('utf-8')
print(decoded_text)

以上代码中,首先将字符串“Hello, World!”编码为Base64格式的数据,然后再将其解码为原始字符串。通过使用base64模块,我们可以方便地在Python中进行Base64编码和解码的操作。

Java 调用

要使用Base64编码和解码,在Java中可以使用java.util.Base64类。可以通过以下方法来导入Base64类:

import java.util.Base64;

然后使用Base64编码和解码的例子如下:

public class Base64Example {

    public static void main(String[] args) {
        String originalString = "Hello, World!";
        
        // 编码
        String encodedString = Base64.getEncoder().encodeToString(originalString.getBytes());
        System.out.println("Encoded string: " + encodedString);
        
        // 解码
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
        String decodedString = new String(decodedBytes);
        System.out.println("Decoded string: " + decodedString);
    }
}

以上代码首先将原始字符串"Hello, World!"进行编码,然后再进行解码。最终输出结果如下:

Encoded string: SGVsbG8sIFdvcmxkIQ==
Decoded string: Hello, World!

这样就实现了用Base64和Java对字符串进行加密和解密。

Java中toString()和new String()区别

package code;

import java.util.Base64;

public class TestBase64 {
    public static void main(String[] args) {

        String str = "TU0jV0xBTiNVYys5bEdiUjZlNU45aHJ0bTdDQStBPT0jNjQ2NDY1Njk4IzM5OTkwMDAwMzAwMA==";

        String rlt1 = new String(Base64.getDecoder().decode(str));//MM#WLAN#Uc+9lGbR6e5N9hrtm7CA+A==#646465698#399900003000

        String rlt2 = Base64.getDecoder().decode(str).toString();//[B@1540e19d

        System.out.println(rlt1);
        System.out.println(rlt2);
    }
}

str.toString是调用了这个object对象的类的toString方法。一般是返回这么一个String:[class name]@[hashCode]

new String(str)是根据parameter是一个字节数组,使用java虚拟机默认的编码格式,将这个字节数组decode为对应的字符。若虚拟机默认的编码格式是ISO-8859-1,按照ascii编码表即可得到字节对应的字符。

什么时候用什么方法呢?

一般使用字符转码byte[]数组的时候使用new String()

对象打印的时候使用toString()

Base58

Base58算法是一种类似于Base64算法的编码方式,它也用于将二进制数据转换为文本数据。与Base64不同的是,Base58算法不包含容易产生混淆的字符,比如0(数字零)、O(大写字母O)、I(大写字母I)、l(小写字母L),也不包含"+"和"/"符号。

Base58算法通常用于生成易于阅读和书写的短链接、Bitcoin地址等。

Base58算法没有明确的作者和起源,但最为人熟知的是由比特币的创始人中本聪设计并应用于比特币地址的生成。

Base58算法的原理和Base64类似,将输入数据按照一定的规则划分成固定长度的片段,然后对每个片段进行编码转换为Base58字符。Base58算法的编码表通常是由除了易混淆字符外的58个字符组成。

Python实现

在Python中,我们可以使用base58模块来实现Base58算法的编码和解码。以下是一个简单示例代码:

from base58 import b58encode, b58decode

# 将字符串编码为Base58
text = "Hello, World!"
encoded_text = b58encode(text.encode('utf-8'))
print(encoded_text)

# 将Base58编码的字符串解码
decoded_text = b58decode(encoded_text).decode('utf-8')
print(decoded_text)

通过使用base58模块,我们可以轻松地在Python中实现Base58算法的编码和解码操作。