求一个用c语言写的DES加密算法~~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个用c语言写的DES加密算法~~相关的知识,希望对你有一定的参考价值。

要能够从文本文件分组读取要加密的数据

参考技术A using system;
using system.security.cryptography;
using system.io;
using system.text;

public class encryptstringdes

public static void main(string);
return;


// 使用utf8函数加密输入参数
utf8encoding utf8encoding = new utf8encoding();
byte.tochararray());

// 方式一:调用默认的des实现方法des_csp.
des des = des.create();
// 方式二:直接使用des_csp()实现des的实体
//des_csp des = new des_csp();

// 初始化des加密的密钥和一个随机的、8比特的初始化向量(iv)
byte iv = 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef;
des.key = key;
des.iv = iv;

// 建立加密流
symmetricstreamencryptor sse = des.createencryptor();

// 使用cryptomemorystream方法获取加密过程的输出
cryptomemorystream cms = new cryptomemorystream();

// 将symmetricstreamencryptor流中的加密数据输出到cryptomemorystream中
sse.setsink(cms);

// 加密完毕,将结果输出到控制台
sse.write(inputbytearray);
sse.closestream();

// 获取加密数据
byte);

console.writeline();

//上面演示了如何进行加密,下面演示如何进行解密
symmetricstreamdecryptor ssd = des.createdecryptor();
cms = new cryptomemorystream();
ssd.setsink(cms);
ssd.write(encrypteddata);
ssd.closestream();

byte decryptedchararray = utf8encoding.getchars(decrypteddata);
console.writeline("解密后数据:");
console.write(decryptedchararray);
console.writeline();



编译:

d:\csharp>csc des_demo.cs
microsoft (r) c# compiler version 7.00.8905
copyright (c) microsoft corp 2000. all rights reserved.

运行实例:
d:\csharp>des_demo.exe 使用c#编写des加密程序的framework

加密结果:
3d 22 64 c6 57 d1 c4 c3 cf 77 ce 2f d0 e1 78 2a 4d ed 7a a8 83 f9 0e 14 e1 ba 38
7b 06 41 8d b5 e9 3f 00 0d c3 28 d1 f9 6d 17 4b 6e a7 41 68 40

des加密 c++ java

谁可以把下面的java des加密算法写成c++的,要求java加密的可以用c++解密
c++加密的可以用java解密哦

private String encryptData(String retData)
if (!encryptFlag)
return retData;

String returnData = "";
try
String oriDataValue = retData;
BASE64Decoder base64decoder = new BASE64Decoder();
BASE64Encoder base64encoder = new BASE64Encoder();
byte[] keyBytes = base64decoder.decodeBuffer("liana");
KeyGenerator generator = KeyGenerator.getInstance("DES");
generator.init(new SecureRandom(keyBytes));
Key key = generator.generateKey();
Cipher cipher = Cipher.getInstance("DES" + "/" + "ECB" + "/"
+ "PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptBytes = cipher
.doFinal(oriDataValue.getBytes("UTF-8"));
String encryptStr = base64encoder.encode(encryptBytes);
returnData = encryptStr;
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();

return returnData;


private String decryptData(String reqData)
if (!encryptFlag)
return reqData;

String returnData = "";
try
returnData = "";
String encryptDataValue = reqData;
BASE64Decoder base64decoder = new BASE64Decoder();
byte[] keyBytes = base64decoder.decodeBuffer("liana");
KeyGenerator generator = KeyGenerator.getInstance("DES");
generator.init(new SecureRandom(keyBytes));
Key key = generator.generateKey();
Cipher cipher = Cipher.getInstance("DES" + "/" + "ECB" + "/"
+ "PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] oriBytes = cipher.doFinal(base64decoder
.decodeBuffer(encryptDataValue));
returnData = new String(oriBytes, "UTF-8");
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();

return returnData;

Java写DES一般用现成的类库,而C++来完成加密算法工作都是用openssl库来实现的。
openssl库调用不算很难,编译网上也有操作流程。
当不同语言实现加密解密操作的时候,注意一下反馈模式和填充模式就行。
常用的反馈模式是ECB和CBC,你这套代码是用的ECB就是无反馈模式,这个就可以不用考虑了。而填充模式标准的填充方法是pkcs#5标准,如果按照这种标准填充的,那什么语言只要数据对应,都没问题,因为算法的实现是相同的。
参考技术A 只要你用的是标准的DES算法,无论什么语言都是一样

我这有个C++ des加密的小程序,如果你想要,可以留个邮箱
参考技术B 没尝试过。不过,生成exe文件之后,那就无所谓了

以上是关于求一个用c语言写的DES加密算法~~的主要内容,如果未能解决你的问题,请参考以下文章

用C语言来实现DES加密算法(很急)两天内

des算法加密解密的实现

如何实现C语言的DES加密算法实现,请关注

des加密算法(c/c++)

des加密 c++ java

JAVA和.NET使用DES对称加密的区别