一、Base64加密解密
一、前端加密
一、方法 一
const that = this;
const copyruleForm = JSON.parse(JSON.stringify(that.ruleForm));
const c_clus_content = window.btoa(unescape(encodeURIComponent(this.ruleForm.c_clus_content)));
const c_clus_econtent = window.btoa(unescape(encodeURIComponent(this.ruleForm.c_clus_econtent)))
注:unescape()方法已经被弃用,不建议使用
二、方法 二
注:深拷贝处理
const that = this;
# 深拷贝
const copyruleForm = JSON.parse(JSON.stringify(that.ruleForm));
const c_clus_content = btoa(encodeURI(that.ruleForm.c_clus_content));
const c_clus_econtent = btoa(encodeURI(that.ruleForm.c_clus_econtent));
二、后端解密
一、方法 一
public ProdCompDuty update(ProdCompDutyDTO prodCompDutyDTO) {
ProdCompDuty field = prodCompDutyDTO.getField();
//Base64解密 责任中文内容和责任英文内容
if (StringUtil.isNotBlank(prodCompDutyDTO.getIsBase64()) && "true".equals(prodCompDutyDTO.getIsBase64())) {
byte[] bytes1 = Base64.getDecoder().decode(field.getC_clus_content());
String c_clus_content = new String(bytes1);
field.setC_clus_content(c_clus_content);
byte[] bytes2 = Base64.getDecoder().decode(field.getC_clus_econtent());
String c_clus_econtent = new String(bytes2);
field.setC_clus_econtent(c_clus_econtent);
}
ProdCompDutyDao.updateOne_odb_duty_no(field);
return field;
}
二、方法 二
public ProdCompDuty update(ProdCompDutyDTO prodCompDutyDTO) {
ProdCompDuty field = prodCompDutyDTO.getField();
//Base64解密 责任中文内容和责任英文内容
if (StringUtil.isNotBlank(prodCompDutyDTO.getIsBase64()) && "true".equals(prodCompDutyDTO.getIsBase64())) {
try {
String c_clus_content = URLDecoder.decode(new String(Base64.getDecoder().decode(field.getC_clus_content()), "utf-8"), "utf-8");
String c_clus_econtent = URLDecoder.decode(new String(Base64.getDecoder().decode(field.getC_clus_econtent()), "utf-8"), "utf-8");
field.setC_clus_content(c_clus_content);
field.setC_clus_econtent(c_clus_econtent);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
ProdCompDutyDao.updateOne_odb_duty_no(field);
return field;
}
三、前端加密解密
一、window浏览器环境
1、window.btoa() 将ascii字符串或二进制数据转换成 base64 编码过的字符串
2、window.atob() 函数用来解码被 base64 编码过的数据
# 方法名就是 btoa和 atob ,具体语法如下:
window.btoa('hellow World') // 编码 aGVsbG93IFdvcmxk
window.atob('aGVsbG93IFdvcmxk') // 解码 hellow World
注意:不适用于带中文解密,即window.btoa 与 window.atob 不支持中文,且 IE9 以下不支持atob、btoa
解决:btoa 不支持 Unicode 字符编码的问题编码时,先用 encodeURIComponent 对字符串进行编码,再进行 btoa 进行 Base64 编码解码时,先用 atob 对 Base64 编码的串进行解码,再用 decodeURIComponent 对字符串进行解码
var str = "hello,中国";
var encoded_str = btoa(encodeURIComponent(str));
var decoded_str = decodeURIComponent(atob(encoded_str));
console.log(encoded_str); // aGVsbG8lMkMlRTQlQjglQUQlRTUlOUIlQkQ=
console.log(decoded_str); // hello,中国在这里插入代码片
二、封装base64
/*
* base64.js
*/
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined'
? module.exports = factory(global)
: typeof define === 'function' && define.amd
? define(factory) : factory(global)
}((
typeof self !== 'undefined' ? self
: typeof window !== 'undefined' ? window
: typeof global !== 'undefined' ? global
: this
), function(global) {
'use strict';
// existing version for noConflict()
global = global || {};
var _Base64 = global.Base64;
var version = "2.5.2";
// if node.js and NOT React Native, we use Buffer
var buffer;
if (typeof module !== 'undefined' && module.exports) {
try {
buffer = eval("require('buffer').Buffer");
} catch (err) {
buffer = undefined;
}
}
// constants
var b64chars
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var b64tab = function(bin) {
var t = {};
for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
return t;
}(b64chars);
var fromCharCode = String.fromCharCode;
// encoder stuff
var cb_utob = function(c) {
if (c.length < 2) {
var cc = c.charCodeAt(0);
return cc < 0x80 ? c
: cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
+ fromCharCode(0x80 | (cc & 0x3f)))
: (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
+ fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ fromCharCode(0x80 | ( cc & 0x3f)));
} else {
var cc = 0x10000
+ (c.charCodeAt(0) - 0xD800) * 0x400
+ (c.charCodeAt(1) - 0xDC00);
return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
+ fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
+ fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ fromCharCode(0x80 | ( cc & 0x3f)));
}
};
var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
var utob = function(u) {
return u.replace(re_utob, cb_utob);
};
var cb_encode = function(ccc) {
var padlen = [0, 2, 1][ccc.length % 3],
ord = ccc.charCodeAt(0) << 16
| ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
| ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
chars = [
b64chars.charAt( ord >>> 18),
b64chars.charAt((ord >>> 12) & 63),
padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
];
return chars.join('');
};
var btoa = global.btoa ? function(b) {
return global.btoa(b);
} : function(b) {
return b.replace(/[\s\S]{1,3}/g, cb_encode);
};
var _encode = function(u) {
var isUint8Array = Object.prototype.toString.call(u) === '[object Uint8Array]';
return isUint8Array ? u.toString('base64')
: btoa(utob(String(u)));
}
var encode = function(u, urisafe) {
return !urisafe
? _encode(u)
: _encode(String(u)).replace(/[+\/]/g, function(m0) {
return m0 == '+' ? '-' : '_';
}).replace(/=/g, '');
};
var encodeURI = function(u) { return encode(u, true) };
// decoder stuff
var re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g;
var cb_btou = function(cccc) {
switch(cccc.length) {
case 4:
var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
| ((0x3f & cccc.charCodeAt(1)) << 12)
| ((0x3f & cccc.charCodeAt(2)) << 6)
| (0x3f & cccc.charCodeAt(3)),
offset = cp - 0x10000;
return (fromCharCode((offset >>> 10) + 0xD800)
+ fromCharCode((offset & 0x3FF) + 0xDC00));
case 3:
return fromCharCode(
((0x0f & cccc.charCodeAt(0)) << 12)
| ((0x3f & cccc.charCodeAt(1)) << 6)
| (0x3f & cccc.charCodeAt(2))
);
default:
return fromCharCode(
((0x1f & cccc.charCodeAt(0)) << 6)
| (0x3f & cccc.charCodeAt(1))
);
}
};
var btou = function(b) {
return b.replace(re_btou, cb_btou);
};
var cb_decode = function(cccc) {
var len = cccc.length,
padlen = len % 4,
n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
| (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
| (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
| (len > 3 ? b64tab[cccc.charAt(3)] : 0),
chars = [
fromCharCode( n >>> 16),
fromCharCode((n >>> 8) & 0xff),
fromCharCode( n & 0xff)
];
chars.length -= [0, 0, 2, 1][padlen];
return chars.join('');
};
var _atob = global.atob ? function(a) {
return global.atob(a);
} : function(a){
return a.replace(/\S{1,4}/g, cb_decode);
};
var atob = function(a) {
return _atob(String(a).replace(/[^A-Za-z0-9\+\/]/g, ''));
};
var _decode = buffer ?
buffer.from && Uint8Array && buffer.from !== Uint8Array.from
? function(a) {
return (a.constructor === buffer.constructor
? a : buffer.from(a, 'base64')).toString();
}
: function(a) {
return (a.constructor === buffer.constructor
? a : new buffer(a, 'base64')).toString();
}
: function(a) { return btou(_atob(a)) };
var decode = function(a){
return _decode(
String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
.replace(/[^A-Za-z0-9\+\/]/g, '')
);
};
var noConflict = function() {
var Base64 = global.Base64;
global.Base64 = _Base64;
return Base64;
};
// export Base64
global.Base64 = {
VERSION: version,
atob: atob,
btoa: btoa,
fromBase64: decode,
toBase64: encode,
utob: utob,
encode: encode,
encodeURI: encodeURI,
btou: btou,
decode: decode,
noConflict: noConflict,
__buffer__: buffer
};
// if ES5 is available, make Base64.extendString() available
if (typeof Object.defineProperty === 'function') {
var noEnum = function(v){
return {value:v,enumerable:false,writable:true,configurable:true};
};
global.Base64.extendString = function () {
Object.defineProperty(
String.prototype, 'fromBase64', noEnum(function () {
return decode(this)
}));
Object.defineProperty(
String.prototype, 'toBase64', noEnum(function (urisafe) {
return encode(this, urisafe)
}));
Object.defineProperty(
String.prototype, 'toBase64URI', noEnum(function () {
return encode(this, true)
}));
};
}
//
// export Base64 to the namespace
//
if (global['Meteor']) { // Meteor.js
Base64 = global.Base64;
}
// module.exports and AMD are mutually exclusive.
// module.exports has precedence.
if (typeof module !== 'undefined' && module.exports) {
module.exports.Base64 = global.Base64;
}
else if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], function(){ return global.Base64 });
}
// that's it!
return {Base64: global.Base64}
}));
方法使用
1、引用
import {Base64} from './utils/base64'
2、使用
Base64.encode('hellow world'); // 编码 aGVsbG93IFdvcmxk
Base64.decode('aGVsbG93IFdvcmxk'); // 解码 hellow World
三、开源的base64.js
1、下载依赖
$ npm install --save js-base64
2、使用方法:
import {Base64} from 'js-base64'
Base64.encode('hellow world'); // 编码 aGVsbG93IFdvcmxk
Base64.decode('aGVsbG93IFdvcmxk'); // 解码 hellow World
四、后端Base64工具类
一、base64加密解密(apache)
import org.apache.commons.net.util.Base64;
import java.io.UnsupportedEncodingException;
@SuppressWarnings("restriction")
public class BaseEncodeAndDecode {
//加密
public static String getBase64(String str){
byte[] b=null;
String s=null;
try {
b = str.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if(b!=null){
s=Base64.encodeBase64String(b);
}
return s;
}
// 解密
public static String getFromBase64(String s) {
byte[] b = null;
String result = null;
if (s != null) {
try {
b = Base64.decodeBase64(s);
result = new String(b, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
}
二、base64加密解密(util)
import java.util.Base64;
public class BaseEncodeAndDecode {
//加密
private static String BaseEncodeAndDecode(String str) {
//String encodedString = Base64.getEncoder().encodeToString(str.getBytes());
String encodedString = Base64.getEncoder().withoutPadding().encodeToString(str.getBytes());
return encodedString;
}
//解密
private static String getFromBase64(String str) {
byte[] decodedBytes = Base64.getDecoder().decode(str);
String decodedString = new String(decodedBytes);
return decodedString;
}
}