golang|python|lua简单与运算实现的对称加密算法

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func encryptData(code_data string, callback_key string) string {
	dataArr := []rune(code_data)
	keyArr := []byte(callback_key)
	keyLen := len(keyArr)

	var tmpList []int

	for index, value := range dataArr {
		base := int(value)
		dataString := base + int(0xFF&keyArr[index%keyLen])
		tmpList = append(tmpList, dataString)
	}

	var str string

	for _, value := range tmpList {
		str += "@" + fmt.Sprintf("%d", value)
	}
	return str
}

func decryptData(nt_data string, callback_key string) string {
	strLen := len(nt_data)
	newData := []rune(nt_data)
	resultData := string(newData[1:strLen])
	dataArr := strings.Split(resultData, "@")
	keyArr := []byte(callback_key)
	keyLen := len(keyArr)

	var tmpList []int

	for index, value := range dataArr {
		base, _ := strconv.Atoi(value)
		dataString := base - int(0xFF&keyArr[index%keyLen])
		tmpList = append(tmpList, dataString)
	}

	var str string

	for _, val := range tmpList {
		str += string(rune(val))
	}
	return str
}

func main() {
	testData := "#test %data _code$@这是一个简单的测试示例===*******~!@#¥%……&*()——+"
	testKey := "test! key"

	encode := encryptData(testData, testKey)
	fmt.Println(encode)
	decode := decryptData(encode, testKey)
	fmt.Println(decode)
}

 


class cryptDataClass:

	def getByte(self, data):
		tmp = [];
		for s in data:
			tmp.append(ord(s));
		return tmp;
		
	def getChars(self, byte):
		str = '';
		for n in byte:
			str += chr(n);
		return str;
		
	def encryptData(self, data, keys):
		tmpList = [];
		dataArr = self.getByte(data);
		keyArr = self.getByte(keys);
		keyLen = len(keyArr);
		for index,value in enumerate(dataArr):
			tmpList.append(str((0xFF & value) + (0xFF & keyArr[index % keyLen])));
		return "@" + "@".join(tmpList);
	
	def decryptData(self, data, keys):
		tmpList = [];
		dataArr = data.split("@");
		del(dataArr[0]);
		keyArr = self.getByte(keys);
		keyLen = len(keyArr);
		for index,value in enumerate(dataArr):
			tmpList.append(int(value) - (0xFF & keyArr[index % keyLen]) );
		return self.getChars(tmpList);
		
		

data = '#test %data _code$@这是一个简单的测试示例===*******~!@#¥%……&*()——+';
key = 'test! key';
cc = cryptDataClass();
endata = cc.encryptData(data, key);
print endata;
dedata = cc.decryptData(endata, key)
print dedata;

 

require('bit32')
require('string')

function getByte(data, flag)
    local array = {}
    local lens = string.len(data)
    if (flag == false)
    then
        for i=1,lens do
            array[i] = string.byte(data, i)
        end
        return array
    else
        for i=1,lens do
            array[i-1] = string.byte(data, i)
        end
    end
    return array,lens
end

function getChars(bytes)
    local array = {}
    for key, val in pairs(bytes) do
        array[key] = string.char(val)
    end
    return array
end

function encryptData(data, keys)
    local result = ""
    local dataArr = getByte(data, false)
    local keyArr,keyLen = getByte(keys, true)
    for index,value in pairs(dataArr) do
        result = result.."@"..tostring((0xFF and value) + (0xFF and keyArr[(index-1) % keyLen]))
    end
    return result
end

function decryptData(data, keys)
    local result = ""
    local dataArr = string.split(data, '@')
    local keyArr,keyLen = getByte(keys, true)
    for index,value in pairs(dataArr) do
          bytes =  tonumber(value) - (0xFF and keyArr[(index-1) % keyLen])
          result = result..string.char(bytes)
    end
    return result
end

function string.split( str,reps )
    local resultStrList = {}
    string.gsub(str,'[^'..reps..']+',function ( w )
        table.insert(resultStrList,w)
    end)
    return resultStrList
end


local data = '#test %data _code$@这是一个简单的测试示例===*******~!@#¥%……&*()——+'
local key = 'test! key'

ss = encryptData(data, key)
print(ss)

ff = decryptData(ss, key)
print(ff)

 

转载于:https://my.oschina.net/andyhua/blog/1798504

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值