import JSEncrypt from 'jsencrypt';
import CryptoJS from 'crypto-js';

export function createKey() {
	for (var e = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], t = "", n = 0; n < 16; n++) {
	  t += e[Math.ceil(61 * Math.random())]
	}
	return t
}

export function AESEncypt(data, encryptKey) {
	if(!encryptKey) {
		encryptKey = createKey()
	}
	var encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(encryptKey), {
		mode: CryptoJS.mode.ECB,
		padding: CryptoJS.pad.Pkcs7
	});
	return {
		data: encrypted.ciphertext.toString(CryptoJS.enc.Base64),
		encryptKey: encryptKey
	};
};
export function	AESDecrypt(data64, encryptKey){
	var ciphertext = CryptoJS.enc.Base64.parse(data64);
	var decrypted = CryptoJS.AES.decrypt({
		ciphertext: ciphertext
	}, CryptoJS.enc.Utf8.parse(encryptKey), {
		mode: CryptoJS.mode.ECB,
		padding: CryptoJS.pad.Pkcs7
	});
	return CryptoJS.enc.Utf8.stringify(decrypted).toString();
};
export function RSAEncrypt(data) {
	var publicRASEncryptKey = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjPrYs9it54O8ERC8g7tgTkueSaZ7tjy1Ki0giLHtyw/kUdajjOTnvncWMgnrpV96k3Miqwb70qwr+ew/+NpUDsxY0eBcmeOFzzq+zhh4l3fbUOOYgcK+BxtgptRXfZQeZohQPO/tZwr3oh2KO7dt3dkG1HERS5/SEUKhLg6LylwIDAQAB-----END PUBLIC KEY-----';
	const jsencrypt = new JSEncrypt();
	jsencrypt.setPublicKey(publicRASEncryptKey);
	return jsencrypt.encrypt(data);
};
export function RSADecrypt(data) {
	var publicRASEncryptKey = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjPrYs9it54O8ERC8g7tgTkueSaZ7tjy1Ki0giLHtyw/kUdajjOTnvncWMgnrpV96k3Miqwb70qwr+ew/+NpUDsxY0eBcmeOFzzq+zhh4l3fbUOOYgcK+BxtgptRXfZQeZohQPO/tZwr3oh2KO7dt3dkG1HERS5/SEUKhLg6LylwIDAQAB-----END PUBLIC KEY-----';
	const jsencrypt = new JSEncrypt();
	jsencrypt.setPublicKey(publicRASEncryptKey);
	return jsencrypt.decrypt(data);
}