Base64加密解密
admin 阅读: 2024-03-29
后台-插件-广告管理-内容页头部广告(手机) |
一、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()方法已经被弃用,不建议使用- 1
- 2
- 3
- 4
- 5
- 6
二、方法 二
注:深拷贝处理
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));- 1
- 2
- 3
- 4
- 5
二、后端解密
一、方法 一
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; }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
二、方法 二
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; }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
三、前端加密解密
一、window浏览器环境
1、window.btoa() 将ascii字符串或二进制数据转换成 base64 编码过的字符串
2、window.atob() 函数用来解码被 base64 编码过的数据
# 方法名就是 btoa和 atob ,具体语法如下: window.btoa('hellow World') // 编码 aGVsbG93IFdvcmxk window.atob('aGVsbG93IFdvcmxk') // 解码 hellow World- 1
- 2
- 3
注意:不适用于带中文解密,即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,中国在这里插入代码片- 1
- 2
- 3
- 4
- 5
- 6
二、封装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
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
方法使用
1、引用 import {Base64} from './utils/base64' 2、使用 Base64.encode('hellow world'); // 编码 aGVsbG93IFdvcmxk Base64.decode('aGVsbG93IFdvcmxk'); // 解码 hellow World- 1
- 2
- 3
- 4
- 5
三、开源的base64.js
1、下载依赖 $ npm install --save js-base64 2、使用方法: import {Base64} from 'js-base64' Base64.encode('hellow world'); // 编码 aGVsbG93IFdvcmxk Base64.decode('aGVsbG93IFdvcmxk'); // 解码 hellow World- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
四、后端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; } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
二、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; } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |