给我写一个base64工具类
时间: 2023-08-02 08:30:38 浏览: 60
好的,下面是一个简单的 Python 实现的 Base64 工具类:
```python
import base64
class Base64Util:
@staticmethod
def encode(s: str) -> str:
return base64.b64encode(s.encode('utf-8')).decode('utf-8')
@staticmethod
def decode(s: str) -> str:
return base64.b64decode(s.encode('utf-8')).decode('utf-8')
```
使用示例:
```python
text = 'hello, world!'
encoded = Base64Util.encode(text)
print(encoded) # aGVsbG8sIHdvcmxkIQ==
decoded = Base64Util.decode(encoded)
print(decoded) # hello, world!
```
注意:这只是一个简单的示例,实际场景中还需要考虑编码格式、异常处理等问题。
相关问题
帮我写一个base64转文件的工具类
好的,我可以回答这个问题。以下是一个简单的基于C语言的base64转文件的工具类:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BASE64_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
int base64_decode(char *input, unsigned char *output, int input_len) {
int i, j, k;
unsigned char c;
unsigned char *p = output;
for (i = ; i < input_len; i += 4) {
k = ;
for (j = ; j < 4 && i + j < input_len; j++) {
c = strchr(BASE64_CHARS, input[i + j]) - BASE64_CHARS;
if (c == 64) {
c = ;
k++;
} else {
c = (c << 2) | (k & 3);
k++;
}
*p++ = c;
}
}
return p - output;
}
int base64_to_file(char *input, char *filename) {
int input_len = strlen(input);
int output_len = input_len * 3 / 4;
unsigned char *output = malloc(output_len);
int bytes_written;
output_len = base64_decode(input, output, input_len);
FILE *fp = fopen(filename, "wb");
if (fp == NULL) {
free(output);
return -1;
}
bytes_written = fwrite(output, 1, output_len, fp);
fclose(fp);
free(output);
return bytes_written;
}
```
使用方法:
```c
char *base64_str = "SGVsbG8gV29ybGQh";
char *filename = "hello.txt";
int bytes_written = base64_to_file(base64_str, filename);
if (bytes_written < ) {
printf("Failed to write file\n");
} else {
printf("Wrote %d bytes to file %s\n", bytes_written, filename);
}
```
这个工具类可以将base64编码的字符串转换为二进制数据,并将其写入文件中。
java给我写一个base64算法工具类,不能调用其他类
好的,下面是 Java 实现的 Base64 工具类,不依赖其他类库:
```java
public class Base64Util {
private static final char[] BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
private static final int[] BASE64_INVERT_TABLE = new int[256];
static {
for (int i = 0; i < BASE64_INVERT_TABLE.length; i++) {
BASE64_INVERT_TABLE[i] = -1; // 初始化为 -1
}
for (int i = 0; i < BASE64_TABLE.length; i++) {
BASE64_INVERT_TABLE[BASE64_TABLE[i]] = i;
}
}
public static String encode(String s) {
byte[] data = s.getBytes(StandardCharsets.UTF_8);
StringBuilder sb = new StringBuilder();
int len = data.length;
for (int i = 0; i < len; i += 3) {
int b1 = data[i] & 0xFF;
int b2 = i + 1 < len ? data[i + 1] & 0xFF : 0;
int b3 = i + 2 < len ? data[i + 2] & 0xFF : 0;
int c1 = b1 >>> 2;
int c2 = ((b1 & 0x03) << 4) | (b2 >>> 4);
int c3 = ((b2 & 0x0F) << 2) | (b3 >>> 6);
int c4 = b3 & 0x3F;
sb.append(BASE64_TABLE[c1]).append(BASE64_TABLE[c2]);
sb.append(i + 1 < len ? BASE64_TABLE[c3] : "=");
sb.append(i + 2 < len ? BASE64_TABLE[c4] : "=");
}
return sb.toString();
}
public static String decode(String s) {
byte[] data = s.getBytes(StandardCharsets.UTF_8);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = data.length;
for (int i = 0; i < len; i += 4) {
int c1 = BASE64_INVERT_TABLE[data[i]];
int c2 = i + 1 < len ? BASE64_INVERT_TABLE[data[i + 1]] : -1;
int c3 = i + 2 < len ? BASE64_INVERT_TABLE[data[i + 2]] : -1;
int c4 = i + 3 < len ? BASE64_INVERT_TABLE[data[i + 3]] : -1;
if (c1 == -1 || c2 == -1 || c3 == -1 || c4 == -1) {
throw new IllegalArgumentException("Invalid Base64 string");
}
int b1 = (c1 << 2) | (c2 >>> 4);
int b2 = ((c2 & 0x0F) << 4) | (c3 >>> 2);
int b3 = ((c3 & 0x03) << 6) | c4;
bos.write(b1);
if (c3 != -1) {
bos.write(b2);
}
if (c4 != -1) {
bos.write(b3);
}
}
return new String(bos.toByteArray(), StandardCharsets.UTF_8);
}
}
```
使用示例:
```java
String text = "hello, world!";
String encoded = Base64Util.encode(text);
System.out.println(encoded); // aGVsbG8sIHdvcmxkIQ==
String decoded = Base64Util.decode(encoded);
System.out.println(decoded); // hello, world!
```
注意:这只是一个简单的示例,实际场景中还需要考虑编码格式、异常处理等问题。