b2c信息网

您现在的位置是:首页 > 昨日新闻 > 正文

昨日新闻

javades源码(java的源码)

hacker2022-10-18 18:10:22昨日新闻88
本文目录一览:1、如题,求Java的DES算法代码,可以用于解密用C语言写的DES加密算法!其中C语言代码见问题补充

本文目录一览:

如题,求Java的DES算法代码,可以用于解密用C语言写的DES加密算法!其中C语言代码见问题补充

俺就是来帮助你这样可爱的人。俺可是花了几年的时间费了多大的力气才能把这个东西弄出来!

DES加密还没有AES严密:

package com.palic.pss.afcs.worldthrough.common.util;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

import repack.com.thoughtworks.xstream.core.util.Base64Encoder;

/**

 * AES加密解密

 * @author

 *

 */

public class AesUtils {

public static final String cKey= "assistant7654321";

 /** 

    * 加密--把加密后的byte数组先进行二进制转16进制在进行base64编码 

    * @param sSrc 

    * @param sKey 

    * @return 

    * @throws Exception 

    */  

   public static String encrypt(String sSrc, String sKey) throws Exception {  

       if (sKey == null) {  

           throw new IllegalArgumentException("Argument sKey is null.");  

       }  

       if (sKey.length() != 16) {  

           throw new IllegalArgumentException(  

                   "Argument sKey'length is not 16.");  

       }  

       byte[] raw = sKey.getBytes("ASCII");  

       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  

 

       Cipher cipher = Cipher.getInstance("AES");  

       cipher.init(Cipher.ENCRYPT_MODE, skeySpec);  

 

       byte[] encrypted = cipher.doFinal(sSrc.getBytes("UTF-8"));  

       String tempStr = parseByte2HexStr(encrypted);  

 

       Base64Encoder encoder = new Base64Encoder();  

       return encoder.encode(tempStr.getBytes("UTF-8"));  

   }  

 

   /** 

    *解密--先 进行base64解码,在进行16进制转为2进制然后再解码 

    * @param sSrc 

    * @param sKey 

    * @return 

    * @throws Exception 

    */  

   public static String decrypt(String sSrc, String sKey) throws Exception {  

 

       if (sKey == null) {  

           throw new IllegalArgumentException("499");  

       }  

       if (sKey.length() != 16) {  

           throw new IllegalArgumentException("498");  

       }  

 

       byte[] raw = sKey.getBytes("ASCII");  

       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  

 

       Cipher cipher = Cipher.getInstance("AES");  

       cipher.init(Cipher.DECRYPT_MODE, skeySpec);  

 

       Base64Encoder encoder = new Base64Encoder();  

       byte[] encrypted1 = encoder.decode(sSrc);  

 

       String tempStr = new String(encrypted1, "utf-8");  

       encrypted1 = parseHexStr2Byte(tempStr);  

       byte[] original = cipher.doFinal(encrypted1);  

       String originalString = new String(original, "utf-8");  

       return originalString;  

   }  

 

   /** 

    * 将二进制转换成16进制 

    *  

    * @param buf 

    * @return 

    */  

   public static String parseByte2HexStr(byte buf[]) {  

       StringBuffer sb = new StringBuffer();  

       for (int i = 0; i  buf.length; i++) {  

           String hex = Integer.toHexString(buf[i]  0xFF);  

           if (hex.length() == 1) {  

               hex = '0' + hex;  

           }  

           sb.append(hex.toUpperCase());  

       }  

       return sb.toString();  

   }  

 

   /** 

    * 将16进制转换为二进制 

    *  

    * @param hexStr 

    * @return 

    */  

   public static byte[] parseHexStr2Byte(String hexStr) {  

       if (hexStr.length()  1)  

           return null;  

       byte[] result = new byte[hexStr.length() / 2];  

       for (int i = 0; i  hexStr.length() / 2; i++) {  

           int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);  

           int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),  

                   16);  

           result[i] = (byte) (high * 16 + low);  

       }  

       return result;  

   } 

   public static void main(String[] args) throws Exception {

/*

* 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定

*/

String cKey = "assistant7654321";

// 需要加密的字串

String cSrc = "123456";

// 加密

long lStart = System.currentTimeMillis();

String enString = encrypt(cSrc, cKey);

System.out.println("加密后的字串是:" + enString);

long lUseTime = System.currentTimeMillis() - lStart;

System.out.println("加密耗时:" + lUseTime + "毫秒");

// 解密

lStart = System.currentTimeMillis();

String DeString = decrypt(enString, cKey);

System.out.println("解密后的字串是:" + DeString);

lUseTime = System.currentTimeMillis() - lStart;

System.out.println("解密耗时:" + lUseTime + "毫秒");

}

}

看java代码,帮我找出DES密钥,我看不懂代码

这段代码你解密了吗?我有些自己的看法,可以交流下

前3个为构造方法,都是构造密匙。方法中调用b方法实质返回值为Key的那个b方法,倒数第二个是正在的加密解密步骤,因为上文使用的key初始化的时候用的是2,故为解密,(1表示加密)。

以下几点为本人拙见,第四个方法为转换原始明文

最后一个b方法 我写成这样a1(a2(paramstring)) , a2为第四个方法a,看参数就知道了,a1为含有doFinal的解密方法。

我私人有点问题希望和题主交流。以上拙见,疏漏难免。

如何利用DES加密的算法保护Java源代码

Java语言是一种非常适用于网络编程的语言,它的基本结构与C++极为相似,但抛弃了C/C++中指针等内容,同时它吸收了Smalltalk、C++面向对象的编程思想。它具有简单性、鲁棒性、可移植性、动态性等特点。这些特点使得Java成为跨平台应用开发的一种规范,在世界范围内广泛流传。 加密Java源码的原因 Java源代码经过编译以后在JVM中执行。由于JVM界面是完全透明的,Java类文件能够很容易通过反编译器重新转换成源代码。因此,所有的算法、类文件等都可以以源代码的形式被公开,使得软件不能受到保护,为了保护产权,一般可以有以下几种方法: (1)"模糊"类文件,加大反编译器反编译源代码文件的难度。然而,可以修改反编译器,使之能够处理这些模糊类文件。所以仅仅依赖"模糊类文件"来保证代码的安全是不够的。 (2)流行的加密工具对源文件进行加密,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。这时,最终用户在运行应用之前必须先进行解密。但解密之后,最终用户就有了一份不加密的类文件,这和事先不进行加密没有什么差别。 (3)加密类文件,在运行中JVM用定制的类装载器(Class Loader)解密类文件。Java运行时装入字节码的机制隐含地意味着可以对字节码进行修改。JVM每次装入类文件时都需要一个称为ClassLoader的对象,这个对象负责把新的类装入正在运行的JVM。JVM给ClassLoader一个包含了待装入类(例如java.lang.Object)名字的字符串,然后由ClassLoader负责找到类文件,装入原始数据,并把它转换成一个Class对象。 用户下载的是加密过的类文件,在加密类文件装入之时进行解密,因此可以看成是一种即时解密器。由于解密后的字节码文件永远不会保存到文件系统,所以窃密者很难得到解密后的代码。 由于把原始字节码转换成Class对象的过程完全由系统负责,所以创建定制ClassLoader对象其实并不困难,只需先获得原始数据,接着就可以进行包含解密在内的任何转换。 Java密码体系和Java密码扩展 Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API。它们都用factory方法来创建类的例程,然后把实际的加密函数委托给提供者指定的底层引擎,引擎中为类提供了服务提供者接口在Java中实现数据的加密/解密,是使用其内置的JCE(Java加密扩展)来实现的。Java开发工具集1.1为实现包括数字签名和信息摘要在内的加密功能,推出了一种基于供应商的新型灵活应用编程接口。Java密码体系结构支持供应商的互操作,同时支持硬件和软件实现。 Java密码学结构设计遵循两个原则: (1)算法的独立性和可靠性。 (2)实现的独立性和相互作用性。 算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器。Java运行环境Sun版本时, 提供一个缺省的提供器Sun。 下面介绍DES算法及如何利用DES算法加密和解密类文件的步骤。 DES算法简介 DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。

DES加密算法 java实现

/*

* DesEncrypt.java

*

* Created on 2007-9-20, 16:10:47

*

* To change this template, choose Tools | Template Manager

* and open the template in the editor.

*/

//思路: 因为 任意一个字符串,都是由若干字节表示的,每个字节实质就是一个

// 有8位的进进制数,

// 又因为 一个8位二进制数,可用两位16进制字符串表示.

// 因此 任意一个字符串可以由两位16进制字符串表示。

// 而 DES是对8位二进制数进行加密,解密。

// 所以 用DES加密解密时,可以把加密所得的8位进进制数,转成

// 两位16进制数进行保存,传输。

// 具体方法:1 把一个字符串转成8位二进制数,用DES加密,得到8位二进制数的

// 密文

// 2 然后把(由1)所得的密文转成两位十六进制字符串

// 3 解密时,把(由2)所得的两位十六进制字符串,转换成8位二进制

// 数的密文

// 4 把子3所得的密文,用DES进行解密,得到8位二进制数形式的明文,

// 并强制转换成字符串。

// 思考:为什么要通过两位16进制数字符串保存密文呢?

// 原因是:一个字符串加密后所得的8位二进制数,通常不再时字符串了,如果

// 直接把这种密文所得的8位二进制数强制转成字符串,有许多信息因为异

// 常而丢失,导制解密失败。因制要把这个8位二制数,直接以数的形式

// 保存下来,而通常是用两位十六进制数表示。

package frelationmainten;

import java.security.Key;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

/**

*

* 使用DES加密与解密,可对byte[],String类型进行加密与解密

* 密文可使用String,byte[]存储.

*

* 方法:

* void getKey(String strKey)从strKey的字条生成一个Key

*

* String getEncString(String strMing)对strMing进行加密,返回String密文

* String getDesString(String strMi)对strMin进行解密,返回String明文

*

*byte[] getEncCode(byte[] byteS)byte[]型的加密

*byte[] getDesCode(byte[] byteD)byte[]型的解密

*/

public class DesEncrypt {

Key key;

/**

* 根据参数生成KEY

* @param strKey

*/

public void getKey(String strKey) {

try{

KeyGenerator _generator = KeyGenerator.getInstance("DES");

_generator.init(new SecureRandom(strKey.getBytes()));

this.key = _generator.generateKey();

_generator=null;

}catch(Exception e){

e.printStackTrace();

}

}

/**

* 加密String明文输入,String密文输出

* @param strMing

* @return

*/

public String getEncString(String strMing) {

byte[] byteMi = null;

byte[] byteMing = null;

String strMi = "";

try {

return byte2hex(getEncCode (strMing.getBytes() ) );

// byteMing = strMing.getBytes("UTF8");

// byteMi = this.getEncCode(byteMing);

// strMi = new String( byteMi,"UTF8");

}

catch(Exception e){

e.printStackTrace();

}

finally {

byteMing = null;

byteMi = null;

}

return strMi;

}

/**

* 解密 以String密文输入,String明文输出

* @param strMi

* @return

*/

public String getDesString(String strMi) {

byte[] byteMing = null;

byte[] byteMi = null;

String strMing = "";

try {

return new String(getDesCode(hex2byte(strMi.getBytes()) ));

// byteMing = this.getDesCode(byteMi);

// strMing = new String(byteMing,"UTF8");

}

catch(Exception e) {

e.printStackTrace();

}

finally {

byteMing = null;

byteMi = null;

}

return strMing;

}

/**

* 加密以byte[]明文输入,byte[]密文输出

* @param byteS

* @return

*/

private byte[] getEncCode(byte[] byteS) {

byte[] byteFina = null;

Cipher cipher;

try {

cipher = Cipher.getInstance("DES");

cipher.init(Cipher.ENCRYPT_MODE, key);

byteFina = cipher.doFinal(byteS);

}

catch(Exception e) {

e.printStackTrace();

}

finally {

cipher = null;

}

return byteFina;

}

/**

* 解密以byte[]密文输入,以byte[]明文输出

* @param byteD

* @return

*/

private byte[] getDesCode(byte[] byteD) {

Cipher cipher;

byte[] byteFina=null;

try{

cipher = Cipher.getInstance("DES");

cipher.init(Cipher.DECRYPT_MODE, key);

byteFina = cipher.doFinal(byteD);

}catch(Exception e){

e.printStackTrace();

}finally{

cipher=null;

}

return byteFina;

}

/**

* 二行制转字符串

* @param b

* @return

*/

public static String byte2hex(byte[] b) { //一个字节的数,

// 转成16进制字符串

String hs = "";

String stmp = "";

for (int n = 0; n b.length; n++) {

//整数转成十六进制表示

stmp = (java.lang.Integer.toHexString(b[n] 0XFF));

if (stmp.length() == 1)

hs = hs + "0" + stmp;

else

hs = hs + stmp;

}

return hs.toUpperCase(); //转成大写

}

public static byte[] hex2byte(byte[] b) {

if((b.length%2)!=0)

throw new IllegalArgumentException("长度不是偶数");

byte[] b2 = new byte[b.length/2];

for (int n = 0; n b.length; n+=2) {

String item = new String(b,n,2);

// 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节

b2[n/2] = (byte)Integer.parseInt(item,16);

}

return b2;

}

public static void main(String[] args){

System.out.println("hello");

DesEncrypt des=new DesEncrypt();//实例化一个对像

des.getKey("aadd");//生成密匙

String strEnc = des.getEncString("云海飞舞云122");//加密字符串,返回String的密文

System.out.println(strEnc);

String strDes = des.getDesString(strEnc);//把String 类型的密文解密

System.out.println(strDes);

new DesEncrypt();

}

}

有没有java实现的DES加密解密源码

import java.io.*;

public class DES {

/**

* DES 加密算法

* @param data 处理数据

* @param key 密钥

* @param mode =0加密 =1解密

* @return

* @throws Exception

*/

发表评论

评论列表

  • 痛言好倦(2022-10-18 22:51:04)回复取消回复

    ncrypted = cipher.doFinal(sSrc.getBytes("UTF-8"));         String tempStr = parseByte2He