美文网首页
2018-07-17 Base64解码与编码

2018-07-17 Base64解码与编码

作者: V_Jan | 来源:发表于2018-07-17 15:49 被阅读0次

Base64编码是将输入的String对象生成一个 base-64 编码的 ASCII 字符串,其中字符串中的每个字符都被视为一个二进制数据字节。
。详细解释https://en.wikipedia.org/wiki/Base64

利用Base64解码(Java版):
将信息用Base64解码后保存成png文件:
public static String generateImage(String base64Str) {
        if (StringUtils.isEmpty(base64Str)) {
            return null;
        }
        String imgFilePath = Files.tempDir() + UUID.randomUUID().toString() + ".png";
        try {
            byte[] b = Base64.decode(base64Str);
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(b);
            out.flush();
            out.close();
        } catch (Exception e) {
            return null;
        }
return imgFilePath;
}

这里我有一个被Base64编码过的ZPL字符,接着手动将字符用Base64解码后在利用网络工具打印出ZPL图片:
将解码后的信息转成String:

String base64Str = "Cl5YQV5MUk5eTU5ZXk1GTixOXkxIMTAsMTJeTUNZXlBPSV5QVzgxMl5DSTI3CgpeRk82MjAsMTE0MApeR0ZBLDAwOTY5LDAwOTY5LDAxOSxGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0Y4MUY4M0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0Y4MUY4M0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGOUY5RkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGOUY5RkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjA3RkZGRjBGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjA3RkZGRjBGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkMxRkZGQzNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkMxRkZGQzNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZGRkZGRkZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZGRkZGRkZDMDAwMDAwMDAwRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGMDAwMDAwMDAwMDFGRkZGRjAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDFGRkZGRjAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDNGRkY5RkMwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDNGRkY5RkMwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZFMUY4N0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZFMUY4N0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkY4MUY4M0ZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkY4MUY4M0ZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkUwMUY4MDNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkUwMUY4MDNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjAwMUY4MDBGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjAwMUY4MDBGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjBGRkRDMUMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjBGRkRDMUMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFFM0MwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFFM0MwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFBMkMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFCNkMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFCNkMwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzFCNkMwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE5Q0MwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE5Q0MwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE5Q0MwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE4OEMwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApeRE4KXkZUMjAsNjMwXkNWWV5CRDJeRkhfXkZEMDAzODQwOTE3NDgwMDAwWyk+XzFFMDFfMUQ5NjFaMjc4NDU0MThfMURVUFNOXzFENVJYMzA4XzFFMDdTTVZfMURUUBxZLTY0JikjTCBZJjktRCRaSlUsSVAjTloiNyMwOic5JBxJTyhFXzBEXzFFXzA0XkZTCgpeRlQxNSwyM15BME4sMjAsMjReRlZGVUxGSUxMTUVOVF5GUwpeRlQxNSw0Ml5BME4sMjAsMjReRlYxMjM0NTY3ODkwXkZTCl5GVDE1LDYxXkEwTiwyMCwyNF5GVjI2NjMyIEFHT1VSQSBSRF5GUwpeRlQxNSw4MV5BME4sMjAsMjReRlZDQUxBQkFTQVMgIENBIDkxMzAyXkZTCl5GVDYwLDE4M15BME4sMjgsMzJeRlZDT1NUQ09eRlMKXkZUNjAsMjEzXkEwTiwyOCwzMl5GVjEyMzQ1Njc4OTBeRlMKXkZUNjAsMjQ0XkEwTiwyOCwzMl5GVjE3NTUwIENBU1RMRVRJT04gU1ReRlMKXkZUNjAsMjg4XkEwTiw0NSw0NF5GVkNJVFkgT0YgSU5EVVNUUlkgIENBIDkxNzQ4XkZTCl5GVDM4MCwzMF5BME4sMzAsMzReRlY0IExCUyBeRlMKXkZUNjczLDM0XkEwTiwyOCwzMl5GViAxIE9GIDFeRlMKXkZUNTAwLDY5XkEwTiwyMiwyNl5GVkRXVDogNSw0LDNeRlMKXkZUNjIwLDczNl5BME4sMTAwLDc2XkZWICAgXkZTCl5GTzY3Nyw2NDBeR0IxMjMsMTIzLDEyMl5GUwoKXkZUMzAwLDYxOF5CWTNeQkNOLDEwMyxOLE4sLEFeRlY0MjA5MTc0OF5GUwoKXkZUMjkwLDQ5M15BME4sODAsNzBeRlZDQSA5MTcgOS0wOV5GUwpeRlQxMCw3MDReQTBOLDU2LDU4XkZWVVBTIEdST1VORF5GUwpeRlQxMCw3MzdeQTBOLDI2LDMwXkZWVFJBQ0tJTkcgIzogMVogNVJYIDMwOCAwMyAyNzg0IDU0MTheRlMKXkZPMCw3NjJeR0I4MDAsNCw0XkZTCgpeRlQ3OTAsMTAzOV5BME4sMjIsMjZeRlYgXkZTCl5GVDEwLDEwMzVeQTBOLDIyLDI2XkZWQklMTElORzogXkZTCl5GVDEyNiwxMDM1XkEwTiwyMiwyNl5GVlAvUCBeRlMKXkZUMTUsMTUzXkEwTiwyOCwzMl5GVlNISVAgVE86IF5GUwpeRk8wLDYzN15HQjc5OCwxNCwxNF5GUwoKXkZPMCw5OTdeR0I4MDAsMTQsMTReRlMKCl5GTzAsNDE2XkdCODAwLDQsNF5GUwoKXkZPMjQwLDQxNl5HQjMsMjIxLDNeRlMKCl5GVDE5MCwxMTg4XkEwTiwxNCwyMF5GVlhPTCAxOC4wMS4zNiAgICAgICAgICBOVjQ1IDk3LjBBIDAxLzIwMTheRlMKXkZUMTA1LDk4Ml5CWTNeQkNOLDIwMixOLE4sLEFeRlYxWjVSWDMwODAzMjc4NDU0MTheRlMKCl5GVDI3Myw4OTZeQTBOLDk1LDc0XkZWU0FNUExFXkZTCl5YWl5YWgo=";
String str = new String(Base64.decode(base64Str));

然后将结果str贴入http://labelary.com/viewer.html,点Redraw。

image.png
利用Base64解码(NodeJS版):
//这是一段被Base64编码的字符
var rawStr = "Cl5YQV5MUk5eTU5ZXk1GTixOXkxIMTAsMTJeTUNZXlBPSV5QVzgxMl5DSTI3CgpeRk82MjAsMTE0MApeR0ZBLDAwOTY5LDAwOTY5LDAxOSxGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0Y4MUY4M0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0Y4MUY4M0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGOUY5RkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGOUY5RkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjA3RkZGRjBGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjA3RkZGRjBGQzAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkMxRkZGQzNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkMxRkZGQzNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkZGRkZGRkZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZGRkZGRkZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZGRkZGRkZDMDAwMDAwMDAwRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMApGMDAwMDAwMDAwMDFGRkZGRjAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDFGRkZGRjAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDNGRkY5RkMwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDNGRkY5RkMwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZFMUY4N0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwM0ZFMUY4N0ZDMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkY4MUY4M0ZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkY4MUY4M0ZGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkUwMUY4MDNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRkUwMUY4MDNGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjAwMUY4MDBGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwRjAwMUY4MDBGMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjAwMDAwMDAwMApGMDAwMDAwMDAwMDAwMUY4MDAwMDAwMDAwMDAwRjBGRkRDMUMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjBGRkRDMUMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFFM0MwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFFM0MwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFBMkMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFCNkMwMApGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwQzFCNkMwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzFCNkMwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE5Q0MwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE5Q0MwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE5Q0MwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzE4OEMwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApeRE4KXkZUMjAsNjMwXkNWWV5CRDJeRkhfXkZEMDAzODQwOTE3NDgwMDAwWyk+XzFFMDFfMUQ5NjFaMjc4NDU0MThfMURVUFNOXzFENVJYMzA4XzFFMDdTTVZfMURUUBxZLTY0JikjTCBZJjktRCRaSlUsSVAjTloiNyMwOic5JBxJTyhFXzBEXzFFXzA0XkZTCgpeRlQxNSwyM15BME4sMjAsMjReRlZGVUxGSUxMTUVOVF5GUwpeRlQxNSw0Ml5BME4sMjAsMjReRlYxMjM0NTY3ODkwXkZTCl5GVDE1LDYxXkEwTiwyMCwyNF5GVjI2NjMyIEFHT1VSQSBSRF5GUwpeRlQxNSw4MV5BME4sMjAsMjReRlZDQUxBQkFTQVMgIENBIDkxMzAyXkZTCl5GVDYwLDE4M15BME4sMjgsMzJeRlZDT1NUQ09eRlMKXkZUNjAsMjEzXkEwTiwyOCwzMl5GVjEyMzQ1Njc4OTBeRlMKXkZUNjAsMjQ0XkEwTiwyOCwzMl5GVjE3NTUwIENBU1RMRVRJT04gU1ReRlMKXkZUNjAsMjg4XkEwTiw0NSw0NF5GVkNJVFkgT0YgSU5EVVNUUlkgIENBIDkxNzQ4XkZTCl5GVDM4MCwzMF5BME4sMzAsMzReRlY0IExCUyBeRlMKXkZUNjczLDM0XkEwTiwyOCwzMl5GViAxIE9GIDFeRlMKXkZUNTAwLDY5XkEwTiwyMiwyNl5GVkRXVDogNSw0LDNeRlMKXkZUNjIwLDczNl5BME4sMTAwLDc2XkZWICAgXkZTCl5GTzY3Nyw2NDBeR0IxMjMsMTIzLDEyMl5GUwoKXkZUMzAwLDYxOF5CWTNeQkNOLDEwMyxOLE4sLEFeRlY0MjA5MTc0OF5GUwoKXkZUMjkwLDQ5M15BME4sODAsNzBeRlZDQSA5MTcgOS0wOV5GUwpeRlQxMCw3MDReQTBOLDU2LDU4XkZWVVBTIEdST1VORF5GUwpeRlQxMCw3MzdeQTBOLDI2LDMwXkZWVFJBQ0tJTkcgIzogMVogNVJYIDMwOCAwMyAyNzg0IDU0MTheRlMKXkZPMCw3NjJeR0I4MDAsNCw0XkZTCgpeRlQ3OTAsMTAzOV5BME4sMjIsMjZeRlYgXkZTCl5GVDEwLDEwMzVeQTBOLDIyLDI2XkZWQklMTElORzogXkZTCl5GVDEyNiwxMDM1XkEwTiwyMiwyNl5GVlAvUCBeRlMKXkZUMTUsMTUzXkEwTiwyOCwzMl5GVlNISVAgVE86IF5GUwpeRk8wLDYzN15HQjc5OCwxNCwxNF5GUwoKXkZPMCw5OTdeR0I4MDAsMTQsMTReRlMKCl5GTzAsNDE2XkdCODAwLDQsNF5GUwoKXkZPMjQwLDQxNl5HQjMsMjIxLDNeRlMKCl5GVDE5MCwxMTg4XkEwTiwxNCwyMF5GVlhPTCAxOC4wMS4zNiAgICAgICAgICBOVjQ1IDk3LjBBIDAxLzIwMTheRlMKXkZUMTA1LDk4Ml5CWTNeQkNOLDIwMixOLE4sLEFeRlYxWjVSWDMwODAzMjc4NDU0MTheRlMKCl5GVDI3Myw4OTZeQTBOLDk1LDc0XkZWU0FNUExFXkZTCl5YWl5YWgo=";
let buff = new Buffer(rawStr, 'base64');
let result= buff.toString('utf-8');
console.log(result);

用Base64解码, 解码后将result贴入http://labelary.com/viewer.html,点Redraw生成图片.

详细记录下nodejs如果做Base64的编码与解码:

nodejs 用Buffer来做编码解码的工作,先看例子:

//case来自stackoverflow : https://stackoverflow.com/questions/6182315/how-to-do-base64-encoding-in-node-js

//利用Base64编码
> console.log(Buffer.from("Hello World").toString('base64'));
SGVsbG8gV29ybGQ=

//利用Base64解码
> console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'))
Hello World

官方文档详细介绍了NodeJS Buffer的用途用法:http://nodejs.cn/api/buffer.html#buffer_buffer
摘抄一些在这篇文章里用到的知识点:

  1. 在 [ECMAScript 2015] (ES6) 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。
  2. Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require('buffer').Buffer。
  3. 为了使 Buffer 实例的创建更可靠、更不容易出错,各种 new Buffer() 构造函数已被 废弃,并由 Buffer.from()Buffer.alloc()、和 Buffer.allocUnsafe() 方法替代

其中,我们这里用到的是

  1. er.from(array) 返回一个新建的包含所提供的字节数组的副本的 Buffer
  2. Buffer.from(string[, encoding]) 返回一个新建的包含所提供的字符串的副本的 Buffer

相关文章

网友评论

      本文标题:2018-07-17 Base64解码与编码

      本文链接:https://www.haomeiwen.com/subject/zuwwpftx.html