㈠ 前端js 加密解密方式
一、base64加密
使用JS函数的window.btoa()和 window.atob(),分别是编码和解码
二、编码和解码字符串
使用JS函数的escape()和unescape(),分别是编码和解码
三、AES加密解密
四、RSA加密解密
㈡ 如何在javascript 里面实现和java相同的base64加解密算法
引入base.js类库
varbase64=BASE64.encoder(str);//返回编码后的字回符
varunicode=BASE64.decoder(base64Str);//返回会解码后的unicode码数组。答
http://git.oschina.net/loonhxl/jbase64/blob/master/jbase64.js
㈢ 怎么解决js解码base64中文乱码问题
最近在做一个插件开发,我用c++在插件里面把带中文的字符串用base64算法加密后推给网页的js去解码,解出来的相信大家预料到了,洋文一字不差,中文就TMD的都是乱码。
google了一下,也没找到能解决问题的方法,没办法只好自己研究了。后来发现问题原因了,编码过程肯定是没有问题的,看到前面加颜色那段字了没,就是我解出来的编码虽然是utf8,但是将中文文字进行Base64编码再解码后,重新排列编码的时候,往往就会出现乱码,UTF8页面的编码实际还是用UTF-16存储的。应该在解码后把UTF8还原为UTF-16格式。这样就能真正搞定javascript解密中文base64编码的问题了。
这里我就把js解码代码贴出来,给广大同胞:
/**
* Waitang.com
*/
var base64EncodeChars = "+/";
var base64DecodeChars = new Array(
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 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, -1, -1, -1, -1, -1,
-1, 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, -1, -1, -1, -1, -1);
//base64编码
function base64encode(str) {
var out, i, len;
var c1, c2, c3;
len = str.length;
i = 0;
out = "";
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}
//base64解码
function base64decode(str) {
var c1, c2, c3, c4;
var i, len, out;
len = str.length;
i = 0;
out = "";
while(i < len) {
/* c1 */
do {
c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while(i < len && c1 == -1);
if(c1 == -1)
break;
/* c2 */
do {
c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while(i < len && c2 == -1);
if(c2 == -1)
break;
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
/* c3 */
do {
c3 = str.charCodeAt(i++) & 0xff;
if(c3 == 61)
return out;
c3 = base64DecodeChars[c3];
} while(i < len && c3 == -1);
if(c3 == -1)
break;
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
/* c4 */
do {
c4 = str.charCodeAt(i++) & 0xff;
if(c4 == 61)
return out;
c4 = base64DecodeChars[c4];
} while(i < len && c4 == -1);
if(c4 == -1)
break;
out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
}
return out;
}
这是转换utf8到utf16的代码:
/**
* Yovae.com
*/
//utf-8转utf16
function utf16to8(str) {
var out, i, len, c;
out = "";
len = str.length;
for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c >= 0x0001) && (c <= 0x007F)) {
out += str.charAt(i);
} else if (c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
} else {
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
}
}
return out;
}
//utf-16转utf-8
function utf8to16(str) {
var out, i, len, c;
var char2, char3;
out = "";
len = str.length;
i = 0;
while(i < len) {
c = str.charCodeAt(i++);
switch(c >> 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += str.charAt(i-1);
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
char3 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break;
}
}
return out;
}
这是c++ base64编码代码:
/**
* Yovae.com
*/
CString encode(const CString in_str)
{
const CString _base64_encode_chars = "+/";
CString out_str;
unsigned char c1, c2, c3;
int i = 0;
int len = in_str.GetLength();
while ( i {
c1 = in_str[i++];
if ( i==len )
{
out_str += _base64_encode_chars[ c1>>2 ];
out_str += _base64_encode_chars[ (c1&0x3)<<4 ];
out_str += "==";
break;
}
c2 = in_str[i++];
if ( i==len )
{
out_str += _base64_encode_chars[ c1>>2 ];
out_str += _base64_encode_chars[ ((c1&0x3)<<4) | ((c2&0xF0)>>4) ];
out_str += _base64_encode_chars[ (c2&0xF)<<2 ];
out_str += "=";
break;
}
c3 = in_str[i++];
out_str += _base64_encode_chars[ c1>>2 ];
out_str += _base64_encode_chars[ ((c1&0x3)<<4) | ((c2&0xF0)>>4) ];
out_str += _base64_encode_chars[ ((c2&0xF)<<2) | ((c3&0xC0)>>6) ];
out_str += _base64_encode_chars[ c3&0x3F ];
}
return out_str;
}
㈣ javascript可以把base64编码转换成二进制代码吗求示例代码!
function convertBase64UrlToBytes(base64Str) {
var bytes = window.atob(urlData.split(',')[1]);
//处理异抄常,将ascii码小于0的转换为大于0
var ab = new ArrayBuffer(bytes.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return ia;
}
㈤ js---将base64的数据转换为文件
/**
* 将base64的数据转换成一个Blob对象
* @param {Object} b64Data base64数据
* @param {Object} contentType 数据类型
* @param {Object} sliceSize 分片大小
*/
function b64toBlob(b64Data, contentType, sliceSize) {
let b = b64Data.toString();
b64Data = b.split(',')[1];
var byteCharacters =atob(b64Data);
var byteArrays = [];
for (let offset =0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers =new Array(slice.length);
for (let i =0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray =new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob =new Blob(byteArrays, {type: contentType});
return blob;
}
/**
* 将Blob对象转换为file对象
* @param {Object} theBlob blob对象
* @param {Object} fileName 文件名称
*/
function blobToFile(theBlob,fileName) {
theBlob.lastModifiedDate =new Date();
theBlob.name = fileName;
return theBlob;
}
// 创建一个reader
let reader =new FileReader();
// 将图片转成 base64 格式
reader.readAsDataURL(file);
/**
* 将base64转换为文件
* @param dataurl base64格式数据
* @param filename 文件名
* @param filetype 文件类型
* @returns {File} 二进制流文件
*/
function dataURLtoFile(dataurl,filename,filetype) {
var arr = dataurl.split(","),
bstr =atob(arr[1]),
n = bstr.length,
u8arr =new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {
type: filetype
});
}
㈥ 请教JS和PHP的base64位加密解密的问题
具体代码复如下:
<?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, '');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?>
PHP 独特的语法混制合了C、Java、Perl以及PHP自创的语法。
它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,
执行效率比完全生成HTML标记的CGI要高许多;
PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
㈦ js 将图片转换为base64编码
将图片转换为Base64
获取图片Base64编码
方式一:Blob和FileReader 对象
实现原理:
使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType = "blob"]
使用FileReader 对象接收blob
方式二:canvas.toDataURL()方法
实现原理:
使用canvas.toDataURL()方法
需要解决图片跨域问题 image.crossOrigin = '';
使用了Jquery库的$.Deferred()方法