首页 web前端 js教程 JS 实现Base64编码与解码实例详解

JS 实现Base64编码与解码实例详解

Dec 07, 2016 pm 02:27 PM
js

Js实现Base64编码与解码

Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止信息泄露,而且为了方便传输,进过BASE64编码后的信息会比原始信息长,大概是4/3倍。

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据。

1.加密解密方法使用:

1

2

3

4

5

6

7

8

//1.加密

var str = '124中文内容';

var base = new Base64();

var result = base.encode(str);

//document.write(result);

//2.解密

var result2 = base.decode(result);

document.write(result2);

登录后复制

2.加密、解密算法封装:

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

/**

*

* Base64 encode / decode

*

* @author haitao.tu

* @date 2010-04-26

* @email tuhaitao@foxmail.com

*

*/

function Base64() {

   

 // private property

 _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

   

 // public method for encoding

 this.encode = function (input) {

  var output = "";

  var chr1, chr2, chr3, enc1, enc2, enc3, enc4;

  var i = 0;

  input = _utf8_encode(input);

  while (i < input.length) {

   chr1 = input.charCodeAt(i++);

   chr2 = input.charCodeAt(i++);

   chr3 = input.charCodeAt(i++);

   enc1 = chr1 >> 2;

   enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);

   enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);

   enc4 = chr3 & 63;

   if (isNaN(chr2)) {

    enc3 = enc4 = 64;

   } else if (isNaN(chr3)) {

    enc4 = 64;

   }

   output = output +

   _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +

   _keyStr.charAt(enc3) + _keyStr.charAt(enc4);

  }

  return output;

 }

   

 // public method for decoding

 this.decode = function (input) {

  var output = "";

  var chr1, chr2, chr3;

  var enc1, enc2, enc3, enc4;

  var i = 0;

  input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

  while (i < input.length) {

   enc1 = _keyStr.indexOf(input.charAt(i++));

   enc2 = _keyStr.indexOf(input.charAt(i++));

   enc3 = _keyStr.indexOf(input.charAt(i++));

   enc4 = _keyStr.indexOf(input.charAt(i++));

   chr1 = (enc1 << 2) | (enc2 >> 4);

   chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);

   chr3 = ((enc3 & 3) << 6) | enc4;

   output = output + String.fromCharCode(chr1);

   if (enc3 != 64) {

    output = output + String.fromCharCode(chr2);

   }

   if (enc4 != 64) {

    output = output + String.fromCharCode(chr3);

   }

  }

  output = _utf8_decode(output);

  return output;

 }

   

 // private method for UTF-8 encoding

 _utf8_encode = function (string) {

  string = string.replace(/\r\n/g,"\n");

  var utftext = "";

  for (var n = 0; n < string.length; n++) {

   var c = string.charCodeAt(n);

   if (c < 128) {

    utftext += String.fromCharCode(c);

   } else if((c > 127) && (c < 2048)) {

    utftext += String.fromCharCode((c >> 6) | 192);

    utftext += String.fromCharCode((c & 63) | 128);

   } else {

    utftext += String.fromCharCode((c >> 12) | 224);

    utftext += String.fromCharCode(((c >> 6) & 63) | 128);

    utftext += String.fromCharCode((c & 63) | 128);

   }

   

  }

  return utftext;

 }

   

 // private method for UTF-8 decoding

 _utf8_decode = function (utftext) {

  var string = "";

  var i = 0;

  var c = c1 = c2 = 0;

  while ( i < utftext.length ) {

   c = utftext.charCodeAt(i);

   if (c < 128) {

    string += String.fromCharCode(c);

    i++;

   } else if((c > 191) && (c < 224)) {

    c2 = utftext.charCodeAt(i+1);

    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));

    i += 2;

   } else {

    c2 = utftext.charCodeAt(i+1);

    c3 = utftext.charCodeAt(i+2);

    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));

    i += 3;

   }

  }

  return string;

 }

}

登录后复制

   


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用JS和百度地图实现地图平移功能 如何使用JS和百度地图实现地图平移功能 Nov 21, 2023 am 10:00 AM

如何使用JS和百度地图实现地图平移功能

股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤 股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤 Dec 17, 2023 pm 06:55 PM

股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤

推荐:优秀JS开源人脸检测识别项目 推荐:优秀JS开源人脸检测识别项目 Apr 03, 2024 am 11:55 AM

推荐:优秀JS开源人脸检测识别项目

PHP与JS开发技巧:掌握绘制股票蜡烛图的方法 PHP与JS开发技巧:掌握绘制股票蜡烛图的方法 Dec 18, 2023 pm 03:39 PM

PHP与JS开发技巧:掌握绘制股票蜡烛图的方法

如何使用PHP和JS创建股票蜡烛图 如何使用PHP和JS创建股票蜡烛图 Dec 17, 2023 am 08:08 AM

如何使用PHP和JS创建股票蜡烛图

如何使用JS和百度地图实现地图多边形绘制功能 如何使用JS和百度地图实现地图多边形绘制功能 Nov 21, 2023 am 10:53 AM

如何使用JS和百度地图实现地图多边形绘制功能

如何使用JS和百度地图实现地图点击事件处理功能 如何使用JS和百度地图实现地图点击事件处理功能 Nov 21, 2023 am 11:11 AM

如何使用JS和百度地图实现地图点击事件处理功能

如何使用JS和百度地图实现地图热力图功能 如何使用JS和百度地图实现地图热力图功能 Nov 21, 2023 am 09:33 AM

如何使用JS和百度地图实现地图热力图功能

See all articles