for (int i = 0, j = 0; i < (data.length() - 4); i += 4, j += 3) {
b1 = decodingTable[data.charAt(i)];
b2 = decodingTable[data.charAt(i + 1)];
b3 = decodingTable[data.charAt(i + 2)];
b4 = decodingTable[data.charAt(i + 3)];
bytes[j] = (byte) ((b1 << 2) | (b2 >> 4));
bytes[j + 1] = (byte) ((b2 << 4) | (b3 >> 2));
bytes[j + 2] = (byte) ((b3 << 6) | b4);
}
if (data.charAt(data.length() - 2) == '=') {
b1 = decodingTable[data.charAt(data.length() - 4)];
b2 = decodingTable[data.charAt(data.length() - 3)];
bytes[bytes.length - 1] = (byte) ((b1 << 2) | (b2 >> 4));
} else if (data.charAt(data.length() - 1) == '=') {
b1 = decodingTable[data.charAt(data.length() - 4)];
b2 = decodingTable[data.charAt(data.length() - 3)];
b3 = decodingTable[data.charAt(data.length() - 2)];
bytes[bytes.length - 2] = (byte) ((b1 << 2) | (b2 >> 4));
bytes[bytes.length - 1] = (byte) ((b2 << 4) | (b3 >> 2));
} else {
b1 = decodingTable[data.charAt(data.length() - 4)];
b2 = decodingTable[data.charAt(data.length() - 3)];
b3 = decodingTable[data.charAt(data.length() - 2)];
b4 = decodingTable[data.charAt(data.length() - 1)];
bytes[bytes.length - 3] = (byte) ((b1 << 2) | (b2 >> 4));
bytes[bytes.length - 2] = (byte) ((b2 << 4) | (b3 >> 2));
bytes[bytes.length - 1] = (byte) ((b3 << 6) | b4);
}
return bytes;
}
private static byte[] discardNonBase64Bytes(byte[] data) {
byte[] temp = new byte[data.length];
int bytesCopied = 0;
for (int i = 0; i < data.length; i++) {
if (isValidBase64Byte(data[i])) {
temp[bytesCopied++] = data[i];
}
}
byte[] newData = new byte[bytesCopied];
System.arraycopy(temp, 0, newData, 0, bytesCopied);
return newData;
}
private static String discardNonBase64Chars(String data) {
StringBuffer sb = new StringBuffer();
int length = data.length();
for (int i = 0; i < length; i++) {
if (isValidBase64Byte((byte) (data.charAt(i)))) {
sb.append(data.charAt(i));
}
}
return sb.toString();
}
private static boolean isValidBase64Byte(byte b) {
if (b == '=') {
return true;
} else if ((b < 0) || (b >= 128)) {
return false;
} else if (decodingTable[b] == -1) {
return false;
}
return true;
}
分享到:
相关推荐
+ 论坛邮件采用 Base 64 + UTF-8 格式发送<br> 7. + 快速跳转版块菜单<br> 8. + 快速选择风格<br> 9. + 用户可选择是否使用可视化发帖器<br> 10. + 可设置是否允许某用户组用户看到隐身用户<br> 11. + 可设置是否...
3. Base64编码:使用Java 8及以上版本提供的`java.util.Base64`工具类对字节数组进行编码。 结合以上步骤,我们可以编写一个完整的程序,实现ZXing生成二维码并进行Base64编码的功能。这个程序可能包含一个主函数,...
65<br>12.1 BASE64编码介绍 65<br>12.2 BASE64编解码原理 65<br>12.3 主要函数 66<br>12.4 编程示例 66<br>第十三章 Openssl ASN1库 69<br>13.1 ASN1简介 69<br>13.2 DER编码 70<br>13.3 ASN1基本类型示例 71<br>...
3. 将所有的编码结果连接起来,形成最终的BASE64字符串。 使用BASE64转换的优点 使用BASE64转换有很多优点,包括: 1. 可以在网络上传输二进制数据。 2. 可以在文本文件中存储二进制数据。 3. 可以在JSON、XML、...
1,01.zip<br>Toolbar - Custom status messages and tooltips<br>用户状态信息与工具提示(3KB)<END><br>2,02.zip<br>Remove system menu from floating toolbar<br>从浮动工具条中去除系统菜单(2KB)<END><br>3,03....
65<br>12.1 BASE64编码介绍 65<br>12.2 BASE64编解码原理 65<br>12.3 主要函数 66<br>12.4 编程示例 66<br>第十三章 Openssl ASN1库 69<br>13.1 ASN1简介 69<br>13.2 DER编码 70<br>13.3 ASN1基本类型示例 71<br>...
支持Base64和Quoted-pritable编码与解码;<br> 支持UUCode和XXCode解码;<br> …………<br> <br> 完整功能. 源代码: 有 <br> 适用于 CB3 CB4 CB5 D2 D3 D4 D5 D6 K1
Map<String, Object> data = new HashMap<>(); data.put("title", "报告标题"); data.put("content", "这是报告内容..."); // 添加更多数据... ``` 步骤四:生成HTML字符串 使用FreeMarker的`Template`类加载模板...
在Java开发过程中,有时我们可能需要使用到Base64编码,这是一种将二进制数据转换为可打印ASCII字符的机制,常用于在网络上传输或存储数据。然而,在JDK 1.6版本中,Base64相关的类并不内置在标准库中,这可能会导致...
The 80x86 MOV Instruction<br>4.8 - Some Final Comments on the MOV Instructions<br><br>4.9 Laboratory Exercises<br>4.9.1 The UCR Standard Library for 80x86 Assembly Language Programmers<br>4.9.2 ...
1,01.zip<br>Output<br>显示所有的调试信息(5KB)<END><br>2,02.zip<br>Some general debugging tips<br>一般的调试技巧(11KB)<END><br>3,03.zip<br>Debugging ISAPI extension<br>调试ISAPI扩展(4KB)<END><br>4,04....
1,ftp.ZIP <br>DIY一个CUTEFTP之类的程序(45KB)<END><br>2,base64.ZIP <br>一个DLL文件(14KB)<END><br>3,uueuud.ZIP <br>按照UUCode标准对文件进行快速编码(14KB)<END> <br>4,dssk170d.EXE <br>由Dolphin System公司...
1,01.zip<br>Class for displaying system error messages<br>显示系统错误信息的一个类(5KB)<END><br>2,02.zip<br>Simple Thread Class<br>一个简单的线程类(13KB)<END><br>3,03.zip<br>Single Instance Program ...
64. `<param>`:为`<object>`或`<embed>`设置参数。 65. `<pre>`:以固定宽度字体显示预格式化的文本。 66. `<q>`:表示短引号。 67. `<s>`:显示删除线文本,HTML5中推荐使用`<del>`。 68. `<samp>`:表示代码...
<artifactId>javabase64</artifactId> <version>1.3.1</version> </dependency> ``` 或者在Gradle中,可以在build.gradle文件中添加: ```groovy implementation 'com.novocode:javabase64:1.3.1' ``` 在实际应用...
1,ftp.ZIP <br>DIY一个CUTEFTP之类的程序(45KB)<br>2,base64.ZIP <br>一个DLL文件(14KB)<br>3,uueuud.ZIP <br>按照UUCode标准对文件进行快速编码(14KB) <br>4,docprops.ZIP <br>结构化存储文件接口,解压后有一个...
openssl sha1 -binary *.ovf | openssl base64 > sha1sum.txt ``` 这个命令会生成一个名为 `sha1sum.txt` 的文件,其中包含了新的 SHA1 值。 2. **替换 SHA1 值**:使用文本编辑器打开 *.mf 文件,找到对应于...
- **创建`<img>`元素**:在获取到Base64字符串后,可以创建一个新的`<img>`元素,并设置其`src`属性为Base64字符串。 ```javascript let imgElement = document.createElement('img'); imgElement.src = base64...
3. `<a>`: 定义超链接,可以链接到其他页面、文件、位置或邮箱地址。 4. `<abbr>`: 定义缩写或首字母缩略词,可以使用`title`属性提供完整形式。 5. `<article>`: 定义文档或页面中的独立内容区域,比如博客文章或...
3、<a> 定义超链接。 4、<abbr> 定义缩写。 5、<address> 定义地址元素。 6、<area> 定义图像映射中的区域。 7、<article> 定义外部的内容。 8、<aside> 定义article 以外的内容。 9、<audio> 定义声音内容。 10、<b...