Java与.NET DES加密解密互转[转载]

项目需要在两个系统间采用DES加密,一个系统为Java开发的,另外一个.NET开发的

在网上找了很多写法但加密出的数据两个系统都无法匹配,

在做了小修改以后终于可以用了,已经测试过

上代码

Java代码:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;


public class Des {
private byte[] desKey;


//解密数据
public static String decrypt(String message,String key)
throws Exception {

byte[] bytesrc =convertHexString(message);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory =
SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(
key.getBytes("UTF-8"));

cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);

byte[] retByte = cipher.doFinal(bytesrc);
return new String(retByte);
}

public static byte[] encrypt(String message, String key)
throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory keyFactory =
SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv =
new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);

return cipher.doFinal(message.getBytes("UTF-8"));
}

public static byte[] convertHexString(String ss)
{
byte digest[] = new byte[ss.length() / 2];
for(int i = 0; i < digest.length; i++)
{
String byteString = ss.substring(2 * i, 2 * i + 2);
int byteValue = Integer.parseInt(byteString, 16);
digest[i] = (byte)byteValue;
}

return digest;
}


public static void main(String[] args) throws Exception
{
String key = "12345678";
String value="test1234 ";
String jiami=java.net.URLEncoder.encode(
value, "utf-8").toLowerCase();

System.out.println("加密数据:"+jiami);
String a=toHexString(encrypt(jiami, key)).toUpperCase();


System.out.println("加密后的数据为:"+a);
String b=java.net.URLDecoder.decode(decrypt(a,key), "utf-8") ;
System.out.println("解密后的数据:"+b);

}


public static String toHexString(byte b[])
{
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++)
{
String plainText = Integer.toHexString(0xff & b[i]);
if (plainText.length() < 2) plainText = "0" + plainText;
hexString.append(plainText);
}

return hexString.toString();
}
}


.NET代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Security.Cryptography;
using System.IO;
using System.Text;

public class TestDes{
//cookies加密密钥
public static string DES_Key = "12345678";

#region DESEnCode DES加密
public static string DESEnCode(string pToEncrypt, string sKey)
{
pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray =
Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);


des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(
ms, des.CreateEncryptor(), CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
#endregion

#region DESDeCode DES解密
public static string DESDeCode(string pToDecrypt, string sKey)
{
// HttpContext.Current.Response.Write(
// pToDecrypt + "<br>" + sKey);
// HttpContext.Current.Response.End();
DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(
x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}

des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(
ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder();


return HttpContext.Current.Server.UrlDecode(
System.Text.Encoding.Default.GetString(ms.ToArray()));
}
#endregion

public TestDes()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}

删除新建快捷方式自动加的&quot;-快捷方式&quot;文字

我们重装系统后,可能有些朋友会发现把其余图标发送桌面快捷方式,发送桌面的图标下面都有快捷方式到XX 这样的字。

通常情况下,我们在新建的快捷方式图标中,常常会出现“快捷方式”四个字,虽然对实际使用不带来什么影响,但多了快捷方式这几个字,或许你会觉得碍眼,不舒服,那么我们就利用注册表去掉快捷方式这四个字吧。

禁止添加“快捷方式”四个字的方法如下介绍。

单击,开始——运行,输入regedit,打开注册表编辑器,打开已有的或新建如下操作子建。子建位置是:
【HKEY-CURRENT-USER \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Explorer】
键值项(数据类型)  键值(说明)
link (二进制值)                00 00 00 00(禁止显示“快捷方式”)

设置完成退出注册表编辑器,重启计算机方可生效。

如果哪天又想恢复快捷方式这四个字,我们只须将Link删掉, Windows下次就会重新起一个正常的Link。

ANDROID代码实现APK文件的安装与卸载

http://www.cnblogs.com/Greenwood/archive/2011/03/09/1979268.html



Android程序使用代码的安装和卸载!!!


安装:


String str = "/CanavaCancel.apk";


String fileName = Environment.getExternalStorageDirectory() + str;


Intent intent = new Intent(Intent.ACTION_VIEW);


 intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");


startActivity(intent);


卸载:



Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");


Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);


startActivity(uninstallIntent);



Environment拥有一些可以获取环境变量的方法


package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名).







//下载apk程序代码
protected File downLoadFile(String httpUrl) {
// TODO Auto-generated method stub
final String fileName = "updata.apk";
File tmpFile = new File("/sdcard/update");
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
final File file = new File("/sdcard/update/" + fileName);

try {
URL url = new URL(httpUrl);
try {
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
InputStream is = conn.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[256];
conn.connect();
double count = 0;
if (conn.getResponseCode() >= 400) {
Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)
.show();
} else {
while (count <= 100) {
if (is != null) {
int numRead = is.read(buf);
if (numRead <= 0) {
break;
} else {
fos.write(buf, 0, numRead);
}

} else {
break;
}

}
}

conn.disconnect();
fos.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}

return file;
}
//打开APK程序代码

private void openFile(File file) {
// TODO Auto-generated method stub
Log.e("OpenFile", file.getName());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
startActivity(intent);
}

VS2012快捷键(转)

注释::VS2010是(Ctrl+E,C),VS2012是(Ctrl+K, Ctrl+C),实际操作,按住Ctrl键不放,先按K键,再按C键。相当于Ctrl+K加 Ctrl+C的组合键


反註解:VS2010是(Ctrl+E,U),VS2012是(Ctrl+K, Ctrl+U)


Ctrl+E,D ----格式化全部代码 Ctrl+A+K+F


Ctrl+E,F ----格式化选中的代码 Ctrl+K+F


CTRL + SHIFT + B生成解决方案 Alt+B+B 或 F6


生成当前项目 Alt+B+U 或 Shift+F6


CTRL + O 打开文件


CTRL + SHIFT + O打开项目


CTRL + SHIFT + C显示类视图窗口


F4 显示属性窗口


SHIFT + F4显示项目属性窗口


CTRL + SHIFT + E显示资源视图


F12 转到定义


CTRL + F12转到声明


CTRL + ALT + J对象浏览


CTRL + ALT + F1帮助目录


CTRL + F1 动态帮助


F1 帮助


SHIFT + F1当前窗口帮助


CTRL + ALT + F3帮助-搜索


SHIFT + ALT + ENTER全屏显示


CTRL + -向后定位


CTRL + SHIFT + -向前定位


CTRL + F4关闭文档窗口


CTRL + PAGE DOWN光标定位到窗口上方


CTRL + PAGE UP光标定位到窗口下方


CTRL + F6 下一个文档窗口(不带提示,快速却换)


CTRL + TAB下一个文档窗口


CTRL + SHIFT + F6


CTRL + SHIFT + TAB上一个文档窗口


ALT + F6下一个面板窗口


CTRL + K, C 或 CTRL+E+C注释选择的代码


CTRL + K, L 或 CTRL + K,U取消对选择代码的注释


CTRL + M, O折叠代码定义


CTRL + M, L展开代码定义


CTRL + DELETE删除至词尾


CTRL + BACKSPACE删除至词头


SHIFT + TAB取消制表符


CTRL + U转小写


CTRL + SHIFT + U转大写


CTRL + SHIFT + END选择至文档末尾


CTRL + SHIFT + HOME选择至文档末尾开始


SHIFT + END选择至行尾


SHIFT + HOME选择至行开始处


SHIFT + ALT + END垂直选择到最后尾


SHIFT + ALT + HOME垂直选择到最前面


CTRL + SHIFT + PAGE UP选择至本页前面


CTRL + SHIFT + PAGE DOWN选择至本页后面


CTRL + END文档定位到最后


CTRL + HOME文档定位到最前


CTRL + A全选


CTRL + W选择当前单词



CTRL + G转到行…


CTRL + K, CTRL + P上一个标签


CTRL + K, CTRL + N下一个标签


F5,F10,F11,ALT+D+S 调试


ALT+D+E 或Shift+F5 停止调试


CTRL + SHIFT + F5调试-重新开始调试


CTRL + SHIFT + F9 取消所有断点


CTRL + F9允许中断


CTRL + F5运行不调试


F10跨过程序执行


F11单步逐句执行


CTRL + J列出成员(这个对象的同类型对象)


CTRL + PAGE DOWN下一个视图


CTRL + B格式-粗体


CTRL + SHIFT + T格式-文字缩进


Ctrl+F10: 运行到光标处


F7: 查看代码


Shift+F7: 查看窗体设计器


F9: 切换断点


Ctrl+F9: 启用/停止断点


Ctrl+Shift+F9: 删除全部断点


编辑快捷键


Ctrl+B,T / Ctrl+K,K: 切换书签开关


Ctrl+B,N / Ctrl+K,N: 移动到下一书签


Ctrl+B,P: 移动到上一书签


Ctrl+B,C: 清除全部标签


Ctrl+I: 渐进式搜索


Ctrl+Shift+I: 反向渐进式搜索


Ctrl+F: 查找


Ctrl+Shift+F: 在文件中查找 (这个好,dw就有查找文件夹功能)


F3: 查找下一个


Shift+F3: 查找上一个


Ctrl+H: 替换


Ctrl+Shift+H: 在文件中替换


Alt+F12: 查找符号(列出所有查找结果)


Ctrl+Shift+V: 剪贴板循环


Ctrl+左右箭头键: 一次可以移动一个单词


Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。


Ctrl+Shift+L: 删除当前行


Shift+Alt+箭头键: 选择矩形文本


Alt+鼠标左按钮: 选择矩形文本


Ctrl+K,M: 生成方法存根


Ctrl+K,X: 插入代码段


Ctrl+K,S: 插入外侧代码


窗口快捷键


Ctrl+W,W: 浏览器窗口


Ctrl+W,S: 解决方案管理器


Ctrl+W,C: 类视图


Ctrl+W,E: 错误列表


Ctrl+W,O: 输出视图


Ctrl+W,P: 属性窗口


Ctrl+W,T: 任务列表


Ctrl+W,X: 工具箱


Ctrl+W,B: 书签窗口


Ctrl+W,U: 文档大纲


Ctrl+D,B: 断点窗口


Ctrl+D,I: 即时窗口


Ctrl+Tab: 活动窗体切换


Ctrl+Shift+N: 新建项目


Ctrl+Shift+O: 打开项目


Ctrl+Shift+S: 全部保存


Shift+Alt+C: 新建类


Ctrl+Shift+A: 新建项


VS2005的隐藏快捷键




1、Ctrl+Space直接完成类或函数(本来这个并不算隐藏的快捷键,但是因为中文输入法抢占这个快捷键,所以。。。,替代的快捷键是Alt+Right)


2、Shift+Delete整行删除,并且将这一行放到剪贴板(这时候不能选中一段内容)


3、Shift+Insert粘贴,有点匪夷所思,Ctrl+V就可以了,大概是为了和Shift+Delete对应吧


4、Ctrl+Up,Ctrl+Down滚动编辑器,但尽量不移动光标,光标保证在可见范围内


5、Ctrl+BackSpace,Ctrl+Delete整词删除,有的时候很有用


6、Ctrl+Left,Ctrl+Right按整词移动光标(不算隐藏,和前面几条加起来就是Ctrl光标控制套件了)


7、Alt+Shift+F10打开执行改名,实现接口和抽象类的小窗口(还可以用Ctrl+.,不过有的中文输入法用到这个)


8、Shift+F9调试是打开QuickWatch,内容是当前光标所在处的内容


9、F12转跳到定义,很有用的快捷键


10、Shift+F12查找所有引用


---------------------------------------VS2008快捷键大全----------------------------


Ctrl+m+Crtr+o折叠所有大纲


Ctrl+M+Crtr+P: 停止大纲显示


Ctrl+K+Crtr+C: 注释选定内容


Ctrl+K+Crtr+U: 取消选定注释内容


Ctrl+J : 列出成员智能感知


Shift+Alt+Enter: 切换全屏编辑


Ctrl+B,T / Ctrl+K,K: 切换书签开关


Ctrl+B,N / Ctrl+K,N: 移动到下一书签


Ctrl+B,P: 移动到上一书签


Ctrl+B,C: 清除全部标签


Ctrl+I: 渐进式搜索


Ctrl+Shift+I: 反向渐进式搜索


Ctrl+F: 查找


Ctrl+Shift+F: 在文件中查找


F3: 查找下一个


Shift+F3: 查找上一个


Ctrl+H: 替换


Ctrl+Shift+H: 在文件中替换


Alt+F12: 查找符号(列出所有查找结果)


Ctrl+Shift+V: 剪贴板循环


Ctrl+左右箭头键: 一次可以移动一个单词


Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。


Ctrl+Shift+L: 删除当前行


Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态


Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态


Ctrl+E,S: 查看空白


Ctrl+E,W: 自动换行


Ctrl+G: 转到指定行


Shift+Alt+箭头键: 选择矩形文本


Alt+鼠标左按钮: 选择矩形文本


Ctrl+Shift+U: 全部变为大写


Ctrl+U: 全部变为小写


代码快捷键


Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息


Ctrl+K,I: 快速信息


Ctrl+E,U / Ctrl+K,U: 取消选定注释内容


Ctrl+K,M: 生成方法存根


Ctrl+K,X: 插入代码段


Ctrl+K,S: 插入外侧代码


F12: 转到所调用过程或变量的定义


窗口快捷键


Ctrl+W,W: 浏览器窗口


Ctrl+W,S: 解决方案管理器


Ctrl+W,C: 类视图


Ctrl+W,E: 错误列表


Ctrl+W,O: 输出视图


trl+W,P: 属性窗口


Ctrl+W,T: 任务列表


Ctrl+W,X: 工具箱


Ctrl+W,B: 书签窗口


Ctrl+W,U: 文档大纲


Ctrl+D,B: 断点窗口


Ctrl+D,I: 即时窗口


Ctrl+Tab: 活动窗体切换


Ctrl+Shift+N: 新建项目


Ctrl+Shift+O: 打开项目


Ctrl+Shift+S: 全部保存


Shift+Alt+C: 新建类


Ctrl+Shift+A: 新建项


Shift+Alt+Enter: 切换全屏编辑


Ctrl+B,T / Ctrl+K,K: 切换书签开关


Ctrl+B,N / Ctrl+K,N: 移动到下一书签


Ctrl+B,P: 移动到上一书签


Ctrl+B,C: 清除全部标签


Ctrl+I: 渐进式搜索


Ctrl+Shift+I: 反向渐进式搜索


Ctrl+F: 查找


Ctrl+Shift+F: 在文件中查找


F3: 查找下一个


Shift+F3: 查找上一个


Ctrl+H: 替换


Ctrl+Shift+H: 在文件中替换


Alt+F12: 查找符号(列出所有查找结果)


Ctrl+Shift+V: 剪贴板循环


Ctrl+左右箭头键: 一次可以移动一个单词


Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。


Ctrl+Shift+L: 删除当前行


Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态


Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态


Ctrl+M,P: 停止大纲显示


Ctrl+E,S: 查看空白


Ctrl+E,W: 自动换行


Ctrl+G: 转到指定行


Shift+Alt+箭头键: 选择矩形文本


Alt+鼠标左按钮: 选择矩形文本


Ctrl+Shift+U: 全部变为大写


Ctrl+U: 全部变为小写