- 浏览: 290738 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
totot:
打扰大师了,acquireWakeLock(),releas ...
使用WakeLock使Android应用程序保持后台唤醒 -
totot:
打扰大师了,acquireWakeLock(),releas ...
使用WakeLock使Android应用程序保持后台唤醒 -
aaa6287152:
感谢楼主 问题解决 一开始按照第一条修改了,结果看第二条没有修 ...
The method of type must override a superclass method解决方式 -
Mark_dev:
chen646531623 写道达哥,很不幸,我出现了你所说的 ...
Unable to resolve host "...": No address associated 错误 解决方案 -
Mark_dev:
我也遇到楼上的那个问题。
Unable to resolve host "...": No address associated 错误 解决方案
很多的网络相关的软件都需要用户名密码登录,在开发的时候像这些密码都是保存在SharedPreferences中,这些密码保存在/data/data/包名/shared_prefs下,保存在一个XML文件中,如下:
可以用FileBrower查看
开始说道正题,MD5加密算法虽然现在有些人已经将其解开了,但是它的加密机制依然很强大,我想绝大对数还是不会解开的。MD5加密算法是单向加 密,只能用你的密码才能解开,要不就是会解密算法,否则想都别想解开。为了防止这种情况的发生。还可以对加密过的密码进行再次加密。
下面是个小例子:
main.xml
- <?xml version= "1.0" encoding= "utf-8" ?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/username"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="20dp"
- android:layout_marginRight="10dp"
- android:hint="帐号"
- />
- <EditText
- android:id="@+id/password"
- android:password="true"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="10dp"
- android:hint="密码"
- />
- <Button
- android:id="@+id/save"
- android:text="保存"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="10dp"
- />
- <Button
- android:id="@+id/login"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="10dp"
- android:text="登录"
- />
- </LinearLayout>
login.xml
- <?xml version= "1.0" encoding= "utf-8" ?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="login successful!"
- />
- </LinearLayout>
login.java
- package com.loulijun.md5demo;
- import android.app.Activity;
- import android.os.Bundle;
- public class Login extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super .onCreate(savedInstanceState);
- setContentView(R.layout.login);
- }
- }
MD5Demo.java
- package com.loulijun.md5demo;
- import java.security.MessageDigest;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- public class MD5Demo extends Activity {
- private EditText username,password;
- private Button savebtn,loginbtn;
- String user,pass;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super .onCreate(savedInstanceState);
- setContentView(R.layout.main);
- username = (EditText)findViewById(R.id.username);
- password = (EditText)findViewById(R.id.password);
- savebtn = (Button)findViewById(R.id.save);
- loginbtn = (Button)findViewById(R.id.login);
- savebtn.setOnClickListener(new Button.OnClickListener()
- {
- @Override
- public void onClick(View v) {
- SharedPreferences pre = getSharedPreferences("loginvalue" ,MODE_WORLD_WRITEABLE);
- pass = MD5(password.getText().toString());
- user = username.getText().toString();
- if (!pass.equals( "" )&&!user.equals( "" ))
- {
- pre.edit().putString("username" , username.getText().toString()).
- putString("password" ,encryptmd5(pass)).commit();
- Toast.makeText(getApplicationContext(), "保存成功!" , Toast.LENGTH_SHORT).show();
- }else
- {
- Toast.makeText(getApplicationContext(), "密码不能为空!" , Toast.LENGTH_LONG).show();
- }
- }
- });
- loginbtn.setOnClickListener(new Button.OnClickListener()
- {
- @Override
- public void onClick(View v) {
- SharedPreferences sp = getSharedPreferences("loginvalue" , MODE_WORLD_READABLE);
- String loginuser = sp.getString("username" , null );
- String loginpass = sp.getString("password" , null );
- user = username.getText().toString();
- pass = password.getText().toString();
- String passmd5 = MD5(pass);
- String encryptmd5 = encryptmd5(passmd5);
- System.out.println("username=" +loginuser+ "-------------password=" +loginpass);
- System.out.println("user==" +user+ "-------------encryptmd5==" +encryptmd5);
- if (!user.equals( "" )&&!pass.equals( "" ))
- {
- if ( user.equals(loginuser)&& encryptmd5.equals(loginpass))
- {
- Intent intent = new Intent();
- intent.setClass(MD5Demo.this , Login. class );
- MD5Demo.this .startActivity(intent);
- finish();
- }else
- {
- Toast.makeText(getApplicationContext(), "密码是错误的!" , Toast.LENGTH_LONG).show();
- }
- }else
- {
- Toast.makeText(getApplicationContext(), "密码不能为空!" , Toast.LENGTH_LONG).show();
- }
- }
- });
- }
- //MD5加密,32位
- public static String MD5(String str)
- {
- MessageDigest md5 = null ;
- try
- {
- md5 = MessageDigest.getInstance("MD5" );
- }catch (Exception e)
- {
- e.printStackTrace();
- return "" ;
- }
- char [] charArray = str.toCharArray();
- byte [] byteArray = new byte [charArray.length];
- for ( int i = 0 ; i < charArray.length; i++)
- {
- byteArray[i] = (byte )charArray[i];
- }
- byte [] md5Bytes = md5.digest(byteArray);
- StringBuffer hexValue = new StringBuffer();
- for ( int i = 0 ; i < md5Bytes.length; i++)
- {
- int val = (( int )md5Bytes[i])& 0xff ;
- if (val < 16 )
- {
- hexValue.append("0" );
- }
- hexValue.append(Integer.toHexString(val));
- }
- return hexValue.toString();
- }
- // 可逆的加密算法
- public static String encryptmd5(String str) {
- char [] a = str.toCharArray();
- for ( int i = 0 ; i < a.length; i++)
- {
- a[i] = (char ) (a[i] ^ 'l' );
- }
- String s = new String(a);
- return s;
- }
- }
程序很简单,下面是运行的效果:
发表评论
-
ASimpleCache 一个为android制定的 轻量级的 开源缓存框架。
2014-04-10 11:04 1724ASimpleCache 是一个为android制定的 轻量 ... -
android 中 EditText加入图标 更改边框颜色 设置透明 代码
2013-07-19 10:20 4055main.xml [java] view pl ... -
TortoiseGit安装教程
2013-07-17 11:40 2023TortoiseGit 是Windows下的可视化Git界面 ... -
使用WakeLock使Android应用程序保持后台唤醒
2013-07-17 11:02 3033在使用一些产品列如 ... -
Android AlarmManager实现不间断轮询服务
2013-07-17 10:48 2967在消息的获取上是选择轮询还 是推送得根据实际的业务需要来技 ... -
二维码、条形码扫描——使用Google ZXing
2013-07-17 10:20 3630我在项目中用到了二维码扫描的技术,用的是Google提供的Z ... -
android 基于基站,apn,gps,wifi,network 根据不同手机sim卡获取经纬度
2013-05-20 15:08 2326一:新建MyLocation类,本类主要管理使用各种获取经 ... -
android 基于百度地图api开发定位以及获取详细地址
2013-05-20 15:02 2883一:百度地图开发必须要到百度开发平台android开发api ... -
android google地图定位开发,且可以自由移动位置重新获取定位,地址信息
2013-05-20 15:00 2696一:申请key: 1.首先找到debug keyst ... -
Android UI库及组件推荐
2013-03-28 10:40 1880一、UI组件库 1. GreenDroid ... -
Android 启动模拟器是出现“Failed to allocate memory: 8”错误提示的原因及解决办法
2012-11-13 10:00 1822关键词:Android、模拟器、无法启动 某天,Andr ... -
关于Eclpse升级到ADT-20,xml布局文件不能正常显示问题
2012-10-29 17:39 17211.首先要把自己的eclipse中的adt升级到最新的版本(目 ... -
Android开发错误汇总
2012-10-29 17:38 3641大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的 ... -
The method of type must override a superclass method解决方式
2012-09-21 10:18 2268标签:override ActionSupport ... -
[程序猿感悟] Android平台开发中的重构三步走
2012-09-13 16:26 2051我们都知道,技术是优 ... -
Android Layout XML属性
2012-08-16 11:29 1235Layout对于迅速的搭建界面和提高界面在不同分辨率的屏幕 ... -
Eclipse快捷键大全
2012-08-02 09:50 1127Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ct ... -
Android中asset文件夹和raw文件夹区别
2012-07-26 16:58 2007*res/raw和assets的相同点 ... -
分享45个android实例源码,很好很强大.大家赶快来收藏吧!!
2012-07-26 15:55 1124http://www.eoeandroid.com/threa ... -
Intent调用大全,史上最全的
2012-07-26 12:11 1066//调用浏览器 Uri uri = Uri.parse(&q ...
相关推荐
本篇主要围绕"Android杂谈---Nexus S的ROOT教程"展开,讲解如何为Nexus S这款经典的Android设备获取ROOT权限,并涉及与之相关的源码和工具。 首先,我们需要理解ROOT是什么。在Android操作系统中,ROOT权限相当于...
本文将深入探讨Android中的闹钟实现,涉及源码分析以及如何使用相关工具进行调试和优化。 首先,Android提供了`AlarmManager`类来管理闹钟服务。它是系统服务,可以通过`Context.getSystemService(Context.ALARM_...
Eclipse下PeerSim仿真(2010-07-24 14:21:16) 转载▼ 标签: 杂谈 Eclipse下PeerSim仿真 时间: 2010.06.25 23:00:00 标签: PeerSim ,Eclipse ...******************** Eclipse下PeerSim仿真 ******************** ...
为了解学术界东西方思维习惯的演变,本文建立了以随机概率论为基础的数学模型,考虑东西价值观差异,以揭示政府管制和道德引导在学术界树立正确价值观和文化自信中的影响以及必要性。数学模型都不是完全真实的,需要...
标题中的“杂谈----1 显示横向滚动条”暗示了我们将会探讨的是关于在界面设计中如何实现或处理横向滚动条的技术问题。这通常涉及到前端开发,特别是网页或应用程序的用户界面(UI)部分,其中可能包括HTML、CSS和...
计算机汇编杂谈-理解其中的原理
本文将深入探讨K3 WISE中的采购价格管控策略及其实施细节,旨在帮助使用者更好地理解和应用这些功能。 #### 二、单价精度设置 单价精度的设置直接影响到后续的价格核算和数据分析。合理的单价精度能够确保数据的...
【房地产行业地产杂谈系列之五】这篇研究报告主要聚焦于主流商业管理企业的经营与发展差异,通过对华润万象生活、宝龙商业、合景悠活、星盛商业和卓越商企服务等几家代表性企业的分析,揭示了行业的现状和未来趋势。...
在"swing开发杂谈--初版本程序源码"中,可能包含了上述部分或全部知识点的实际应用,通过分析`netHelper`这个子文件夹,我们可以看到可能的网络辅助类或其他功能模块的实现。这个源码可能会演示如何使用Swing构建一...
### 多核多线程杂谈-并行计算 #### 1. 并行计算概述 随着计算机硬件的发展,单核处理器的性能提升遇到了物理瓶颈,因此多核处理器成为了提高计算能力的关键技术之一。并行计算是利用多核处理器或多台计算机协同...
从零开始做Vue前端架构(5)webpack发布版配置 & 配置重构 从零开始做Vue前端架构(6)单元测试 & 代码覆盖率 从零开始做Vue前端架构(7)e2e测试 从零开始做Vue前端架构(8)vuex 从零开始做Vue前端架构(9)...
「安全管理」Linux_HIDS杂谈 - WEB应用防火墙 安全管理 安全资讯 安全开发 零信任 身份管理
本文将基于“Android开发杂谈”的主题,结合提供的资源——一个名为"Android_.pdf"的文件,来深入探讨一些重要的知识点。 1. **源码阅读**: 在Android开发中,理解源码是提升技能的关键。Android开源项目(AOSP)...
### 知识点生成 #### 一、纯电动汽车的发展历史与现状 - **起源与发展初期:** - 世界上第一辆具有实际应用价值的电动汽车诞生于19世纪30年代,由英国发明家罗伯特·戴维森创造。 - 早期电动汽车因性能问题和...
然而,不是所有主题都能带来长期的行情,如2017年的雄安新区主题,其行情可能因短期基本面提振有限或低于预期而迅速消退。2023年的重要主题之一是城中村改造,该主题的行情持续性将取决于改造的实际进展和房企是否...
### 软件工程历史概览 #### 一、程序设计的起源与始祖 - **十七世纪的计算器发展**:十七世纪初,人类开始尝试制造计算器,这标志着早期计算机科学的萌芽。1623年,德国的博学者Wilhelm Schickard制造了世界上第一...
在编程世界中,程序设计是一门深奥的艺术,它涵盖了逻辑构建、问题解决、算法设计、数据结构使用、代码组织等多个方面。这份“程序设计经验杂谈”文档,据说是出自一位大师之手,无疑为我们提供了宝贵的洞见。在本文...
### 嵌入式开发杂谈—薛立功经典之作:关键知识点解析 #### 一、引言 在嵌入式开发领域,《嵌入式开发杂谈》是薛立功先生的经典著作之一,该作品旨在解答新手在入门阶段遇到的各种问题。通过作者的经验分享,帮助...