如何使用JAVA实现对字符串的DES加密和解密

如何使用JAVA实现对字符串的DES加密和解密,第1张

/

  ECB模式的des加密,以base64的编码输出

  @param message

  @param key

  @return

  @throws Exception

 /

  public static String desEncrypt(String message, String key)throws Exception{

    // DES/ECB CBC CFB OFB /PKCS5Padding  NoPadding  加密/模式/填充

    Cipher cipher = CiphergetInstance("DES");//默认就是 DES/ECB/PKCS5Padding

    DESKeySpec desKeySpec = new DESKeySpec(keygetBytes());

    SecretKeyFactory keyFactory = SecretKeyFactorygetInstance("DES");

    SecretKey secretKey = keyFactorygenerateSecret(desKeySpec);

    cipherinit(1, secretKey);

   return new BASE64Encoder()encode(cipherdoFinal(messagegetBytes("UTF-8")));

  }

  /

    ECB模式的des解密

    @param message

    @param key

    @return

    @throws Exception

   /

  public static String desDecrypt(String message, String key)throws Exception{

    Cipher cipher = CiphergetInstance("DES");

    DESKeySpec desKeySpec = new DESKeySpec(keygetBytes());

    SecretKeyFactory keyFactory = SecretKeyFactorygetInstance("DES");

    SecretKey secretKey = keyFactorygenerateSecret(desKeySpec);

    cipherinit(2, secretKey);

    return new String(cipherdoFinal(Base64decode(message)), "UTF-8");

  }

你自己写main方法测试一下,应该是没问题的

import javasecurityInvalidKeyException;

import javasecurityKey;

import javasecurityNoSuchAlgorithmException;

import javaxcrypto;  

import javaxcryptospec;  

/

  

  @author wchun

  

  AES128 算法,加密模式为ECB,填充模式为 pkcs7(实际就是pkcs5)

  

 

 /

public class AES {

static final String algorithmStr="AES/ECB/PKCS5Padding";

static private KeyGenerator keyGen;

static private Cipher cipher;

static boolean isInited=false;

//初始化

static private void init()

{

//初始化keyGen

try {

keyGen=KeyGeneratorgetInstance("AES");

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

keyGeninit(128);

//初始化cipher

try {

cipher=CiphergetInstance(algorithmStr);

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (NoSuchPaddingException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

isInited=true;

}

public static byte[] GenKey()

{

if(!isInited)//如果没有初始化过,则初始化

{

init();

}

return keyGengenerateKey()getEncoded();

}

public static byte[] Encrypt(byte[] content,byte[] keyBytes)

{

byte[] encryptedText=null;

if(!isInited)//为初始化

{

init();

}

Key key=new SecretKeySpec(keyBytes,"AES");

try {

cipherinit(CipherENCRYPT_MODE, key);

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

try {

encryptedText=cipherdoFinal(content);

} catch (IllegalBlockSizeException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (BadPaddingException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return encryptedText;

}

//解密为byte[]

public static byte[] DecryptToBytes(byte[] content,byte[] keyBytes)

{

byte[] originBytes=null;

if(!isInited)

{

init();

}

Key key=new SecretKeySpec(keyBytes,"AES");

try {

cipherinit(CipherDECRYPT_MODE, key);

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

//解密

try {

originBytes=cipherdoFinal(content);

} catch (IllegalBlockSizeException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (BadPaddingException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return originBytes;

}

}

基于Java的IDEA加密算法探讨

随着Internet的迅速发展,电子商务的浪潮势不可挡,日常工作和数据传输都放在Internet网上进行传输,大大提高了效率,降低了成本,创造了良好的效益。但是,由于 Internet网络协议本身存在着重要的安全问题(IP包本身并不继承任何安全特性,很容易伪造出IP包的地址、修改其内容、重播以前的包以及在传输途中拦截并查看包的内容),使网上的信息传输存在巨大的安全风险电子商务的安全问题也越来越突出。加密是电子商务中最主要的安全技术,加密方法的选取直接影响电子商务活动中信息的安全程度,在电子商务系统中,主要的安全问题都可以通过加密来解决。数据的保密性可通过不同的加密算法对数据加密来实现。

对我国来讲,虽然可以引进很多的外国设备,但加密设备不能依靠引进,因为它涉及到网络安全、国家机密信息的安全,所以必须自己研制。当前国际上有许多加密算法,其中DES(Data Encryption Standard)是发明最早的用得最广泛的分组对称加密算法,DES用56位蜜钥加密64位明文,输出64位密文,DES的56位密钥共有256 种可能的密钥,但历史上曾利用穷举攻击破解过DES密钥,1998年电子边境基金会(EFF)用25万美元制造的专用计算机,用56小时破解了DES的密钥,1999年,EFF用22小时完成了破解工作,使DES算法受到了严重打击,使它的安全性受到严重威胁。因为JAVA语言的安全性和网络处理能力较强,本文主要介绍使用IDEA(Internation Data Encryption Algorithm )数据加密算法在Java环境下实现数据的安全传输。

一、IDEA数据加密算法

IDEA数据加密算法是由中国学者来学嘉博士和著名的密码专家 James L Massey 于1990年联合提出的。它的明文和密文都是64比特,但密钥长为128比特。IDEA 是作为迭代的分组密码实现的,使用 128 位的密钥和 8 个循环。这比 DES 提供了更多的 安全性,但是在选择用于 IDEA 的密钥时,应该排除那些称为“弱密钥”的密钥。DES 只有四个弱密钥和 12 个次弱密钥,而 IDEA 中的弱密钥数相当可观,有 2 的 51 次方个。但是,如果密钥的总数非常大,达到 2 的 128 次方个,那么仍有 2 的 77 次方个密钥可供选择。IDEA 被认为是极为安全的。使用 128 位的密钥,蛮力攻击中需要进行的测试次数与 DES 相比会明显增大,甚至允许对弱密钥测试。而且,它本身也显示了它尤其能抵抗专业形式的分析性攻击。

二、Java密码体系和Java密码扩展

Java是Sun公司开发的一种面向对象的编程语言,并且由于它的平台无关性被大量应用于Internet的开发。Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API。它们都用factory方法来创建类的例程,然后把实际的加密函数委托给提供者指定的底层引擎,引擎中为类提供了服务提供者接口在Java中实现数据的加密/解密,是使用其内置的JCE(Java加密扩展)来实现的。Java开发工具集11为实现包括数字签名和信息摘要在内的加密功能,推出了一种基于供应商的新型灵活应用编程接口。Java密码体系结构支持供应商的互 *** 作,同时支持硬件和软件实现。Java密码学结构设计遵循两个原则:(1)算法的独立性和可靠性。(2)实现的独立性和相互作用性。算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器。Java运行环境Sun版本时,提供一个缺省的提供器Sun。

三、Java环境下的实现

1.加密过程的实现

void idea_enc( int data11[], /待加密的64位数据首地址/ int key1[]){

int i ;

int tmp,x;

int zz[]=new int[6];

for ( i = 0 ; i < 48 ; i += 6) { /进行8轮循环/

for(int j=0,box=i; j<6; j++,box++){

zz[j]=key1[box];

}

x = handle_data(data11,zz);

tmp = data11[1]; /交换中间两个/

data11[1] = data11[2];

data11[2] = tmp;

}

tmp = data11[1]; /最后一轮不交换/

data11[1] = data11[2];

data11[2] = tmp;

data11[0] = MUL(data11[0],key1[48]);

data11[1] =(char)((data11[1] + key1[49])%0x10000);

data11[2] =(char)((data11[2] + key1[50])%0x10000);

data11[3] = MUL(data11[3],key1[51]);

}

2.解密过程的实现

void key_decryExp(int outkey[])/解密密钥的变逆处理/

{ int tmpkey[] = new int[52] ;

int i;

for ( i = 0 ; i < 52 ; i++) {

tmpkey[i] = outkey[ wz_spkey[i] ] ; /换位/

}

for ( i = 0 ; i < 52 ; i++) {

outkey[i] = tmpkey[i];

}

for ( i = 0 ; i < 18 ; i++) {

outkey[wz_spaddrever[i]] = (char)(65536-outkey[wz_spaddrever[i]]) ; /替换成加法逆/

}

for ( i = 0 ; i < 18 ; i++){

outkey[wz_spmulrevr[i]] =(char)(mulInv(outkey[wz_spmulrevr[i]] )); /替换成乘法逆/

}

}

四、总结

在实际应用中,我们可以使用Java开发工具包(JDK)中内置的对Socket通信的支持,通过JCE中的Java流和链表,加密基于Socket的网络通信我们知道,加密/解密是数据传输中保证数据完整性的常用方法,Java语言因其平台无关性,在Internet上的应用非常之广泛使用Java实现基于IDEA的数据加密传输可以在不同的平台上实现并具有实现简洁、安全性强等优点。

#####################################

我已经说的很清楚了。。。只要把我说的用程序写下来,加个菜单就行了。。。要是这样都不会的话。。。那就当我没说了。。。

####################################

RSA。。。难道你自己建立PKI,否则没法弄。。。

你说这个题。。直接手算的了。。。又不是大数

N = P Q = 1739

N的欧拉函数

F(N) = ( p - 1 ) ( Q - 1 ) = 1656

然后算模拟嘛。。。5 模 1656的逆。。。

1656 = 1 + 1655 = 1 + 5 331

所以5模1656的逆就是-331 = 1656 - 331 = 1325

所以D = 1325啦

你要加密你至少告诉我明文是什么吧。。。。

如果加密明文M的话,密文C = M 模 1739的E次幂

解密是M = C 模1739的D次幂

小数直接手算啦~费马小定理,从左向右计算,可以简化一部分计算,不过你这个题已经差不多最简化了。。。。你这个题实际上就是用来手算的。真正RSA一般人根本做不出来,光是素性检验就很麻烦了。。而且就算你能实现,你有PKI吗???没有PKI。。。RSA的安全从何而来???

我们也上学期刚学的密码。。。呵呵~~~有问题继续问。。。现在无聊啊。。

哈哈!不会是老师留给你的作业吧!在网上做牛!

VERSION 400

Begin VBForm Form1

Caption = "Sample"

ClientHeight = 705

ClientLeft = 3915

ClientTop = 3315

ClientWidth = 1800

ControlBox = 0 'False

Height = 1110

Left = 3855

LinkTopic = "Form1"

MaxButton = 0 'False

MinButton = 0 'False

ScaleHeight = 705

ScaleWidth = 1800

Top = 2970

Width = 1920

Begin VBCommandButton Command1

Caption = "Command1"

Height = 495

Left = 240

TabIndex = 0

Top = 120

Width = 1215

End

End

Attribute VB_Name = "Form1"

Attribute VB_Creatable = False

Attribute VB_Exposed = False

Sub FileEncodeAndDecode(InputFile As String, OutputFile As String, PasswordKey As String)

Dim temp As Single

Dim Char As String 1

Dim XORMask As Single

Dim temp1 As Integer

Open InputFile For Binary As #1

Open OutputFile For Binary As #2

For x = 1 To Len(PasswordKey)

temp = Asc(Mid$(PasswordKey, x, 1))

For y = 1 To temp

temp1 = Rnd

Next y

' Re-seed to throw off prying eyes

Randomize temp1

Next x

Counter = 0

For z = 1 To FileLen(InputFile)

'Generate random mask

XORMask = Int(Rnd 256)

'Get the char & change it

Get 1, , Char

Char = Chr$((Asc(Char) Xor XORMask))

Put 2, , Char

Counter = Counter + 1

If Counter > Len(PasswordKey) Then Counter = 1

' Pull random numbers from the hat

For x = 1 To (Asc(Mid$(PasswordKey, Counter, 1)) 2)

temp = Rnd

Next x

Next z

Close #1

Close #2

End Sub

Private Sub Command1_Click()

Dim InputFile As String

Dim OutputFile As String

Dim PasswordKey As String

InputFile = InputBox("Enter a filename to encode")

OutputFile = InputBox("Enter the new filename this will become ")

PasswordKey = InputBox("Enter the password (key)")

Call FileEncodeAndDecode(InputFile, OutputFile, PasswordKey)

MsgBox "File written to " + OutputFile

End

End Sub

Private Sub Form_Load()

Command1Caption = "Code/Decode"

End Sub

Form=enc-decfrm

Reference=\G#20#0#D:\WINDOWS\SYSTEM\OLEPRO32DLL#Standard OLE Types

Reference=\G#30#0#D:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\DD:\PROGRAM FIL#Microsoft DAO 30 Object Library

ProjWinSize=113,438,221,107

ProjWinShow=2

Name="Project1"

HelpContextID="0"

StartMode=0

VersionCompatible32="0"

MajorVer=1

MinorVer=0

RevisionVer=0

AutoIncrementVer=0

ServerSupportFiles=0

VersionCompanyName="Southern Cross Software"

Java密码学结构设计遵循两个原则:

1) 算法的独立性和可靠性。

2) 实现的独立性和相互作用性。

算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器。

DES算法及如何利用DES算法加密和解密类文件的步骤:

DES算法简介

DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

以上就是关于如何使用JAVA实现对字符串的DES加密和解密全部的内容,包括:如何使用JAVA实现对字符串的DES加密和解密、java实现aes加密或者解密,不用工具包的怎么做、java环境下实现idea算法的加密解密等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9831982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存