返回顶部
首页 > 资讯 > 后端开发 > Python >XXTEA加解密as3和python分别
  • 390
分享到

XXTEA加解密as3和python分别

加解密XXTEApython 2023-01-31 07:01:47 390人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

加解密代码 package { import flash.display.Shape; import flash.display.Sprite; import flash.utils.ByteArray; public c

加解密代码

package 
{
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.utils.ByteArray;
	
	public class Test extends Sprite {
		
		public function Test() {
			var dataStr:String = "Today's weather is Good.";
			var data:ByteArray = new ByteArray();
			data.writeMultiByte(dataStr, "utf-8");
			
			var keyStr:String = "abcxyz123";
			var key:ByteArray = new ByteArray();
			key.writeMultiByte(keyStr, "utf-8");
			trace("data:", dataStr);
			trace("key:", keyStr);
			
			//加密
			var encryptData:ByteArray = XXTEA.encrypt(data, key);
			var content:String = Base64.encodeByteArray(encryptData);
			trace("encode: " + content);
			
			//解密
			encryptData = Base64.decodeToByteArray(content);
			var sourceBtyes:ByteArray = XXTEA.decrypt(encryptData, key);
			var sourceStr:String = sourceBtyes.toString();
			trace("decode: " + sourceStr );
			
		}
	}
}

XXTEA加解密用到了Base64,以下是XXTEA和Base64的代码


XXTEA的代码 

package 
{	
	import flash.utils.ByteArray;   
	import flash.utils.Endian;   
	
	public class XXTEA {  
		
		private static const delta:uint = uint(0x9E3779B9);   
		
		private static function LongArrayToByteArray(data:Array, includeLength:Boolean):ByteArray {   
			var length:uint = data.length;   
			var n:uint = (length - 1) << 2;   
			if (includeLength) {   
				var m:uint = data[length - 1];   
				if ((m < n - 3) || (m > n)) {   
					return null;   
				}   
				n = m;   
			}   
			var result:ByteArray = new ByteArray();   
			result.endian = Endian.LITTLE_ENDIAN;   
			for (var i:uint = 0; i < length; i++) {   
				result.writeUnsignedInt(data[i]);   
			}   
			if (includeLength) {   
				result.length = n;   
				return result;   
			}   
			else {   
				return result;   
			}   
		}  
		
		private static function ByteArrayToLongArray(data:ByteArray, includeLength:Boolean):Array {   
			var length:uint = data.length;   
			var n:uint = length >> 2;   
			if (length % 4 > 0) {   
				n++;   
				data.length += (4 - (length % 4));   
			}   
			data.endian = Endian.LITTLE_ENDIAN;   
			data.position = 0;   
			var result:Array = [];   
			for (var i:uint = 0; i < n; i++) {   
				result[i] = data.readUnsignedInt();   
			}   
			if (includeLength) {   
				result[n] = length;   
			}   
			data.length = length;   
			return result;   
		} 
		
		public static function encrypt(data:ByteArray, key:ByteArray):ByteArray {   
			if (data.length == 0) {   
				return new ByteArray();   
			}   
			var v:Array = ByteArrayToLongArray(data, true);   
			var k:Array = ByteArrayToLongArray(key, false);   
			if (k.length < 4) {   
				k.length = 4;   
			}   
			var n:uint = v.length - 1;   
			var z:uint = v[n];   
			var y:uint = v[0];   
			var mx:uint;   
			var e:uint;   
			var p:uint;   
			var q:uint = uint(6 + 52 / (n + 1));   
			var sum:uint = 0;   
			while (0 < q--) {   
				sum = sum + delta;   
				e = sum >>> 2 & 3;   
				for (p = 0; p < n; p++) {   
					y = v[p + 1];   
					mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
					z = v[p] = v[p] + mx;   
				}   
				y = v[0];   
				mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
				z = v[n] = v[n] + mx;   
			}   
			return LongArrayToByteArray(v, false);   
		}   
		
		public static function decrypt(data:ByteArray, key:ByteArray):ByteArray {   
			if (data.length == 0) {   
				return new ByteArray();   
			}   
			var v:Array = ByteArrayToLongArray(data, false);   
			var k:Array = ByteArrayToLongArray(key, false);   
			if (k.length < 4) {   
				k.length = 4;   
			}   
			var n:uint = v.length - 1;   
			var z:uint = v[n - 1];   
			var y:uint = v[0];   
			var mx:uint;   
			var e:uint;   
			var p:uint;   
			var q:uint = uint(6 + 52 / (n + 1));   
			var sum:uint = q * delta;   
			while (sum != 0) {   
				e = sum >>> 2 & 3;   
				for (p = n; p > 0; p--) {   
					z = v[p - 1];   
					mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
					y = v[p] = v[p] - mx;   
				}   
				z = v[n];   
				mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
				y = v[0] = v[0] - mx;   
				sum = sum - delta;   
			}   
			return LongArrayToByteArray(v, true);   
		}   
	}   
}  

Base64的代码

package
{	
	import flash.utils.ByteArray;    
	
	public class Base64 {    

		private static const BASE64_CHARS:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";             
		
		
		public static const version:String = "1.0.0";    
		
		public static function encode(data:String):String {    
			// Convert string to ByteArray    
			var bytes:ByteArray = new ByteArray();    
			bytes.writeUTFBytes(data);    
			
			// Return encoded ByteArray    
			return encodeByteArray(bytes);    
		}    
		
		public static function encodeByteArray(data:ByteArray):String {    
			// Initialise output    
			var output:String = "";    
			
			// Create data and output buffers    
			var dataBuffer:Array;    
			var outputBuffer:Array = new Array(4);    
			
			// Rewind ByteArray    
			data.position = 0;    
			
			// while there are still bytes to be processed    
			while (data.bytesAvailable > 0) {    
				// Create new data buffer and populate next 3 bytes from data    
				dataBuffer = new Array();    
				for (var i:uint = 0; i < 3 && data.bytesAvailable > 0; i++) {    
					dataBuffer[i] = data.readUnsignedByte();    
				}    
				
				// Convert to data buffer Base64 character positions and     
				// store in output buffer    
				outputBuffer[0] = (dataBuffer[0] & 0xfc) >> 2;    
				outputBuffer[1] = ((dataBuffer[0] & 0x03) << 4) | ((dataBuffer[1]) >> 4);    
				outputBuffer[2] = ((dataBuffer[1] & 0x0f) << 2) | ((dataBuffer[2]) >> 6);    
				outputBuffer[3] = dataBuffer[2] & 0x3f;    
				
				// If data buffer was short (i.e not 3 characters) then set    
				// end character indexes in data buffer to index of '=' symbol.    
				// This is necessary because Base64 data is always a multiple of    
				// 4 bytes and is basses with '=' symbols.    
				for (var j:uint = dataBuffer.length; j < 3; j++) {    
					outputBuffer[j + 1] = 64;    
				}    
				
				// Loop through output buffer and add Base64 characters to     
				// encoded data string for each character.    
				for (var k:uint = 0; k < outputBuffer.length; k++) {    
					output += BASE64_CHARS.charAt(outputBuffer[k]);    
				}    
			}    
			
			// Return encoded data    
			return output;    
		}    
		
		public static function decode(data:String):String {    
			// Decode data to ByteArray    
			var bytes:ByteArray = decodeToByteArray(data);    
			
			// Convert to string and return    
			return bytes.readUTFBytes(bytes.length);    
		}    
		
		public static function decodeToByteArray(data:String):ByteArray {    
			// Initialise output ByteArray for decoded data    
			var output:ByteArray = new ByteArray();    
			
			// Create data and output buffers    
			var dataBuffer:Array = new Array(4);    
			var outputBuffer:Array = new Array(3);    
			
			// While there are data bytes left to be processed    
			for (var i:uint = 0; i < data.length; i += 4) {    
				// Populate data buffer with position of Base64 characters for    
				// next 4 bytes from encoded data    
				for (var j:uint = 0; j < 4 && i + j < data.length; j++) {    
					dataBuffer[j] = BASE64_CHARS.indexOf(data.charAt(i + j));    
				}    
				
				// Decode data buffer back into bytes    
				outputBuffer[0] = (dataBuffer[0] << 2) + ((dataBuffer[1] & 0x30) >> 4);    
				outputBuffer[1] = ((dataBuffer[1] & 0x0f) << 4) + ((dataBuffer[2] & 0x3c) >> 2);            
				outputBuffer[2] = ((dataBuffer[2] & 0x03) << 6) + dataBuffer[3];    
				
				// Add all non-padded bytes in output buffer to decoded data    
				for (var k:uint = 0; k < outputBuffer.length; k++) {    
					if (dataBuffer[k+1] == 64) break;    
					output.writeByte(outputBuffer[k]);    
				}    
			}    
			
			// Rewind decoded data ByteArray    
			output.position = 0;    
			
			// Return decoded data    
			return output;    
		}    
		
		public function Base64() {    
			throw new Error("Base64 class is static container only");    
		}    
	}    
}  

===========以下是python代码=====================

xxtea.py

import struct  
  
_DELTA = 0x9E3779B9  
  
def _long2str(v, w):  
    n = (len(v) - 1) << 2  
    if w:  
        m = v[-1]  
        if (m < n - 3) or (m > n): return ''  
        n = m  
    s = struct.pack('<%iL' % len(v), *v)  
    return s[0:n] if w else s  
  
def _str2long(s, w):  
    n = len(s)  
    m = (4 - (n & 3) & 3) + n  
    s = s.ljust(m, "\0")  
    v = list(struct.unpack('<%iL' % (m >> 2), s))  
    if w: v.append(n)  
    return v  
  
def encrypt(str, key):  
    if str == '': return str  
    v = _str2long(str, True)  
    k = _str2long(key.ljust(16, "\0"), False)  
    n = len(v) - 1  
    z = v[n]  
    y = v[0]  
    sum = 0  
    q = 6 + 52 // (n + 1)  
    while q > 0:  
        sum = (sum + _DELTA) & 0xffffffff  
        e = sum >> 2 & 3  
        for p in xrange(n):  
            y = v[p + 1]  
            v[p] = (v[p] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  
            z = v[p]  
        y = v[0]  
        v[n] = (v[n] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[n & 3 ^ e] ^ z))) & 0xffffffff  
        z = v[n]  
        q -= 1  
    return _long2str(v, False)  
  
def decrypt(str, key):  
    if str == '': return str  
    v = _str2long(str, False)  
    k = _str2long(key.ljust(16, "\0"), False)  
    n = len(v) - 1  
    z = v[n]  
    y = v[0]  
    q = 6 + 52 // (n + 1)  
    sum = (q * _DELTA) & 0xffffffff  
    while (sum != 0):  
        e = sum >> 2 & 3  
        for p in xrange(n, 0, -1):  
            z = v[p - 1]  
            v[p] = (v[p] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  
            y = v[p]  
        z = v[n]  
        v[0] = (v[0] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff  
        y = v[0]  
        sum = (sum - _DELTA) & 0xffffffff  
    return _long2str(v, True)

测试test.py

# -*- coding: utf-8 -*-
if __name__ == "__main__":  
    import xxtea, base64
    data = "Today's weather is good."
    key = "abcxyz123"
    
    #加密
    s = xxtea.encrypt(data, key)
    s = base64.b64encode(s)
    print '加密后:' + repr(s)

    #解密
    s = base64.b64decode(s)
    s = xxtea.decrypt(s, key)
    print repr(s)






--结束END--

本文标题: XXTEA加解密as3和python分别

本文链接: https://lsjlt.com/news/191432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • XXTEA加解密as3和python分别
    加解密代码 package { import flash.display.Shape; import flash.display.Sprite; import flash.utils.ByteArray; public c...
    99+
    2023-01-31
    加解密 XXTEA python
  • Python源码加密与Pytorch模型加密分别介绍
    目录前言一、python源代码的保护二、pytorch模型.pth的加密前言 深度学习领域,常常用python写代码,而且是建立在一些开源框架之上,如pytorch。在实际的项目部署...
    99+
    2022-12-08
    Python源码加密 Pytorch模型加密
  • Python加密和解密怎么理解
    本篇内容主要讲解“Python加密和解密怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python加密和解密怎么理解”吧!在计算机世界里,信息安全始终占...
    99+
    2024-04-02
  • Python使用RSA库加密和解密
    一、rsa库(推荐) 1、公钥加密、私钥解密 # -*- coding: utf-8 -*- import rsa # rsa加密 def rsaEncrypt(str): ...
    99+
    2024-04-02
  • python 加密解密
    MD5  import hashlib  c = raw_input('输入字符:') #python3为input b = hashlib.md5()  b.update(c.encode(encoding='utf-...
    99+
    2023-01-31
    加密解密 python
  • Python的RSA加密和PBE加密
    最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现。在网上搜了一下,python的RSA加密这块写的还是比较多的,但是PBE较少。所以我就讲讲我在RSA加密上面...
    99+
    2023-01-31
    Python RSA PBE
  • python rsa 加密解密
    最近有需求,需要研究一下RSA加密解密安全;在网上百度了一下例子文章,很少有文章介绍怎么保存、传输、打印加密后的文本信息,都是千篇一律的。直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密。仔细想了...
    99+
    2022-06-04
    加密解密 python rsa
  • Python RSA加密解密
    一、RSA加密算法 RSA加密算法是一种非对称加密算法,加密的秘钥是由公钥和私钥两部分组成秘钥对,公钥用来加密消息,私钥用来解密消息,公钥是公开的,给对方进行加密,私钥则是用户自己保留,用来对加密的数...
    99+
    2023-09-03
    python RSA 加密 解密
  • Python 加密解密算法
    呃,今天来看看加密和解密,本文讨论base64和hashlib库:      来看看HASHLIB,他是一种单向摘要出定长字符串的方法:    撸代码:    In [18]: import time,hashlib In [19]: t...
    99+
    2023-01-31
    算法 加密解密 Python
  • Python实现RSA加密解密
    目录前言一、安装模块二、生成密钥对三、加密四、解密五、完整代码前言 加密技术在数据安全存储,数据传输中发挥着重要作用,能够保护用户隐私数据安全,防止信息窃取。RSA是一种非对称加密技...
    99+
    2024-04-02
  • AES加密解密python实现
    1.前言         关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客         AES的细节知识,可以查阅 AES加密算法的详细介绍与实现_Tim...
    99+
    2023-09-20
    python 开发语言 密码学 非对称加密 AES
  • 如何在Python中进行数据加密和解密
    如何在Python中进行数据加密和解密,需要具体代码示例数据加密和解密是信息安全领域中非常重要的概念。在实际应用中,我们经常需要对敏感的数据进行加密保护,以防止未授权的访问和信息泄露。Python是一种功能强大的编程语言,提供了丰富的库和函...
    99+
    2023-10-22
    Python 数据加密 数据解密
  • python数据加密和解密的方法是什么
    在Python中,常用的数据加密和解密方法有以下几种: hashlib模块:使用哈希算法加密数据,常用的哈希算法有MD5、SHA1...
    99+
    2024-02-29
    python
  • PHP代码加密和扩展解密的示例分析
    这篇文章主要介绍了PHP代码加密和扩展解密的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法...
    99+
    2023-06-14
  • java对称加密和非对称加密有什么区别
    对称加密和非对称加密是两种常见的加密算法,它们在加密和解密的过程中有以下区别:1. 密钥的数量:对称加密使用同一个密钥来进行加密和解...
    99+
    2023-09-05
    java
  • python字符串加密与解密
    符串进行加密与解密 设计应用程序时,为了防止一些敏感信息的泄露,通常需要对这些信息进行加密。 以用户的登录密码为例,如果密码以明文的形式存储在数据表中,很容易就会被人发现;相反,如果密码以密文的形式储存,即使别人从数据表中...
    99+
    2023-01-31
    字符串 python
  • 硬盘硬件加密和软件加密的区别是什么
    硬盘硬件加密和软件加密的区别有以下几点:加密方式不同硬件加密是使用安置在加密闪存盘上的专用处理器,是在硬件上进行验证;而软件加密是通过与计算机上的其他程序共享计算机资源且对数据进行加密,将用户密码作为对数据进行干扰的加密密钥;使用场景不同硬...
    99+
    2024-04-02
  • python密码加密与解密的实现
    目录一、对称加密1.1 安装第三方库 - PyCrypto1.2 加密实现二、非对称加密三、摘要算法3.1 md5加密3.2 sha1加密3.3 sha256加密3.4 sha384...
    99+
    2023-02-07
    python 密码加密 python 密码解密
  • 如何分析C# 加密中MD5和SHA1加密实现
    如何分析C# 加密中MD5和SHA1加密实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对于C# 加密的认识,在C# 中可以很方便地进行MD5 和SHA1 加...
    99+
    2023-06-17
  • 【RSA加密/解密】PKCS1_OAEP和PKCS1_v1_5两种填充方案【python RSA密钥对生成、密码加密、密文解密、pycharm安装Crypto】
    一、PKCS1_OAEP和PKCS1_v1_5是公钥加密标准中的两种填充方案。 PKCS1_OAEP(Optimal Asymmetric Encryption Padding)是一种更安全的填充方案...
    99+
    2023-10-26
    算法 开发语言 python pycharm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作