数据加密与保存

//---------------------------------------------------------------------
// 1、加密算法:
//---------------------------------------------------------------------

//加密或解密字符串,change加密、-change解密
public static String Encryption(String str, int change)
{
	short sign = 1;
	if(change<0){ sign = -1; change *= -1; }
	int num = 0;
	int tmp;

	byte[] bytes = str.getBytes();
	for(int i = 0; i < bytes.length; i++)
	{
		if(num == 0) num = change;

		//限定在[0,127]之间
		tmp = bytes[i] + sign * (num % 3);
		if(tmp > 127) tmp -= 127;
		if(tmp < 0) tmp += 127;

		bytes[i] = (byte)tmp;
		num /= 3;
	}
	str = new String(bytes);
	return new String(bytes);
}
//---------------------------------------------------------------------
// 2、将数据保存到 LocalDB
//---------------------------------------------------------------------

//保存加密串到LocalDB中
if(key == "Name1")
{
	String data = "abcdefghijklmnopq...";

	String info = Encryption(data, 7733171);	//加密串
	LocalDB.setString("Name1", info);		//保存到LocalDB
}

//从LocalDB中,获取保存的数据
if(LocalDB.$string.containsKey("Name1"))
{
	String info = LocalDB.$string.get("Name1");	//获取数据
	info = Encryption(value, -7733171);		//解密串
}
//===========================================================================================================
// 3、保存数据到文件
//===========================================================================================================

//类LocalDB.java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import android.os.Environment;

/**
 * 此类功能
 * 1、保存数据到HashMap对象中
 * 2、保存HashMap对象数据到文件
 */
public class LocalDB
{
	private static String fileName = "LocalDB.txt";	//用于保存数据的文件名

	public static HashMap<String, Object> $object;
	public static HashMap<String, Integer> $int;
	public static HashMap<String, Float> $float;
	public static HashMap<String, String> $string;
	public static HashMap<String, Double> $double;
	public static HashMap<String, Long> $long;
	public static HashMap<String, Byte> $byte;
	public static HashMap<String, Short> $short;
	public static HashMap<String, Boolean> $boolean;

//	使用HashMap的静态对象,在程序中临时保存数据
//	private static HashMap<String, Type> $type;	//创建HashMap对象

//	HashMap用法如下:
//	$type.put(String key, Type value)			//存储Type类型数据到$type,索引标识key	存储
//	$type.get(Object key)						//从$type中获取索引标识key的数据		获取
//	$type.containsKey(Object key)				//判断$type中是否含有索引标识key		判断
//	$type.remove(Object key)					//将索引标识key对应的数据从$type中移除	移除

	/**
	 * 保存所有对象的数据,到文件fileName中  -保存
	 */
	public static void save()
	{
		try
		{	//有SD卡
			if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
			{
				File file;
				FileOutputStream f;

				try
				{  	//获得SD卡路径
					String pathString = Environment.getExternalStorageDirectory().getPath();
					file = new File(pathString+"/"+ fileName);

					if(file.exists())file.createNewFile(); //若文件不存在,则新建
					f = new FileOutputStream(file, false); //创建一个文件输出流,true表示在文件末尾添加, false覆盖
				}
				catch (Exception e) { return; }

				ObjectOutputStream o = new ObjectOutputStream(f);
				o.writeObject($object);
				o.writeObject($int);
				o.writeObject($byte);
				o.writeObject($float);
				o.writeObject($double);
				o.writeObject($string);
				o.writeObject($long);
				o.writeObject($boolean);
				o.writeObject($short);
				o.flush();
				f.flush();
				o.close();
				f.close();
			}
		}
		catch (Exception e) { e.printStackTrace(); }
	}

	/**
	 * 从文件fileName中,获取保存的数据到静态对象中  -载入
	 */
	@SuppressWarnings("unchecked")
	public static void Load()
	{
		try
		{
			//获得SD卡路径
			if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
			{
				File file =null;
				FileInputStream f=null;

				try
				{
					String pathString = Environment.getExternalStorageDirectory().getPath();
					file = new File(pathString+"/"+ fileName);

					if(file.exists()) file.createNewFile(); //若文件不存在,则新建
					f = new FileInputStream(file);			//从文件创建一个输入流
				}
				catch (Exception e) { return; }

				try
				{
					ObjectInputStream o = new ObjectInputStream(f);
					$object = (HashMap<String, Object>) o.readObject();
					$int = (HashMap<String, Integer>) o.readObject();
					$byte = (HashMap<String, Byte>) o.readObject();
					$float = (HashMap<String, Float>) o.readObject();
					$double = (HashMap<String, Double>) o.readObject();
					$string = (HashMap<String, String>) o.readObject();
					$long = (HashMap<String, Long>) o.readObject();
					$boolean = (HashMap<String, Boolean>) o.readObject();
					$short = (HashMap<String, Short>) o.readObject();

					o.close();
					f.close();
				}
				catch (Exception e)
				{
					$object = new HashMap<String, Object>();
					$float = new HashMap<String, Float>();
					$int = new HashMap<String, Integer>();
					$string = new HashMap<String, String>();
					$double = new HashMap<String, Double>();
					$long = new HashMap<String, Long>();
					$byte = new HashMap<String, Byte>();
					$short = new HashMap<String, Short>();
					$boolean = new HashMap<String, Boolean>();

					f.close();
				}
			}
		}
		catch (Exception e) { e.printStackTrace(); }
	}
}

二、拓展

//---------------------------------------------------------------
// 1、
// boolean数组数据转换为字符串,加密存储
//---------------------------------------------------------------
//加密flag为字符串
public static String setBooleans(boolean flag[][], int change)
{
	String rewardInfo = "";
	for(int i = 0; i < flag.length; i++)
	{
		for(int j = 0; j < flag[i].length; j++)
		{
			rewardInfo += (flag[i][j] ? "1" : "0") + (j == flag[i].length-1 ? "" : ",");
		}
		rewardInfo += (i == flag.length-1 ? "" : ";");
	}

	String reward = DataEncryption.Encryption(rewardInfo, change);	//加密串
	return reward;
}
//---------------------------------------------------------------------
// 2、将数据保存到 LocalDB
//---------------------------------------------------------------------

//从LocalDB中,获取保存的数据
if(LocalDB.$string.containsKey("Name1"))
{
	String info = LocalDB.$string.get("Name1");
	boolean flag[][] = getBooleans(info, 7733171);			//解密为布尔数组
	for(int i=0; i< flag.length; i++) Treasure_box_form.flag[i] = flag[i];	//复制已有数据

}

//保存加密串到LocalDB中
if(key == "Name1")
{
	String reward = DataEncryption.$string.set(Treasure_box_form.flag, 7733171);	//加密为字符串
	LocalDB.setString("Name1", reward);
}
时间: 2024-10-18 05:16:44

数据加密与保存的相关文章

Django组件-cookie,session

昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反序列化方法:JSON.parse() ajax $.ajax({ url:"", type:"", data:{}, // 默认contentType="urlencoded" success:function(data){ } }) 一.Djang

Dynamics CRM 打开数据加密报错及修改用户邮件保存报错的解决方法

在项目里会碰到在修改用户的电子邮件时报错的问题 然后跑到数据管理里打开数据加密又是报错 解决上述问题只需要做下数据库的更改即可,把标志位置1即可,记得要重启下IIS才能生效 SELECT [ColumnName],[BitColumn] FROM [MSCRM_CONFIG].[dbo].[DeploymentProperties] WHERE ColumnName='DisableSSLCheckForEncryption' UPDATE [MSCRM_CONFIG].[dbo].[Deplo

Libgdx之数据保存 和 数据加密

Libgdx 中使用Preference以哈希表的形式进行数据的保存,在桌面版保存在目录".prefs"下面,注意所有桌面的Preference都保存在.prefs目录下,所以文件名最好以"com.myname.game1.settings"而不是"Settings" 只有调用方法flush才会将数据从内存保存到磁盘上 Gdx.app.getPreferences(String filename)来创建Preference实例 public bo

UI进阶 数据加密

一.数据安全 在互联网发展趋势迅猛的今天,数据安全的重要性日趋凸显.也成为我们必须了解的互联网知识.在移动互联网浪潮下,用户的资金安全.企业的信息安全都是我们实际开发中必须考虑的内容. 相关术语: 密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数.密钥分为对称密钥与非对称密钥(也可以根据用途来分为加密密钥和解密密钥) 明文:没有进行加密,能够直接代表原文含义的信息 密文:经过加密处理处理之后,隐藏原文含义的信息 加密:将明文转换成密文的实施过程 解密:将密文转换成明

iOS文件解压&amp;&amp;数据加密

一文件压缩.这里我们需要一个第三方SSZipArchive(需要添加libz.td) 1 #import "ViewController.h" 2 #import "SSZipArchive.h" 3 4 @interface ViewController () 5 6 @end 7 8 @implementation ViewController 9 10 - (void)viewDidLoad { 11 [super viewDidLoad]; 12 // Do

【Java EE 学习第70天】【数据采集系统第二天】【数据加密处理】【登陆验证】【登陆拦截器】【新建调查】【查询调查】

一.数据加密处理 这里使用MD5加密处理,使用java中自带加密工具类MessageDigest. 该类有一个方法digest,该方法输入参数是一个字符串返回值是一个长度为16的字节数组.最关键的是需要将这个16位的字节数组转换成为32位的字符串,转换方法是使用位移+与运算.将高四位移到低四位&0X0F得到一个字符,直接使用该值&0X0F得到一个字符,这样一个8bit的字节就能够拆成2个字符.最终16Byte就能够转换成为32个字符. 1 package com.kdyzm.utils;

C#编程总结(七)数据加密——附源码

C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取.阅读的目的. 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程.加密建立在对信息进行数学编码和解码的基础上.加密类型分为两种,对称加密与非对称加密,对称加密双方采用共同密钥.非对称加密,这种加密方式存在两个密钥,一个是公共密钥(对外公开),一种

第八篇 SQL Server安全数据加密

本篇文章是SQL Server安全系列的第八篇,详细内容请参考原文. Relational databases are used in an amazing variety of applications with connections from a dizzying array of clients over widely distributed networks,特别是互联网,使得数据几乎向任何人,任何地方开放.数据库可以包含相当大部分的人类知识,包括高度敏感的个人信息和关键数据.数据库的

HDFS数据加密空间--Encryption zone

前言 之前写了许多关于数据迁移的文章,也衍生的介绍了很多HDFS中相关的工具和特性,比如DistCp,ViewFileSystem等等.但是今天本文所要讲的主题转移到了另外一个领域数据安全.数据安全一直是用户非常重视的一点,所以对于数据管理者,务必要做到以下原则: 数据不丢失,不损坏,数据内容不能被非法查阅. 本文所主要描述的方面就是上面原则中最后一点,保证数据不被非法查阅.在HDFS中,就有专门的功能来做这样的事情,Encryption zone,数据加密空间, Encryption zone