我用3DES加密后怎么样才能得到16位的密文

问题描述

明文:12345678秘钥:12345678909876543212345678909876进过计算出来的密文:iGNoZSrV2gnYK7x4ogdzdQ==我现在想让这个密文显示成由0到9,A到F里面的数组成的16位的密文。求解应该怎么弄。最好有代码谢谢各位啦!

解决方案

解决方案二:
急求,在线等
解决方案三:
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Security.Cryptography;usingSystem.IO;namespaceCaoGao{///<summary>///加解密类///</summary>publicclassEncryptHelper{//构造一个对称算法privateSymmetricAlgorithmmCSP=newTripleDESCryptoServiceProvider();#region加密解密函数///<summary>///字符串的加密///</summary>///<paramname="Value">要加密的字符串</param>///<paramname="sKey">密钥,必须32位</param>///<paramname="sIV">向量,必须是12个字符</param>///<returns>加密后的字符串</returns>publicstringEncryptString(stringValue,stringsKey,stringsIV){try{ICryptoTransformct;MemoryStreamms;CryptoStreamcs;byte[]byt;mCSP.Key=Convert.FromBase64String(sKey);mCSP.IV=Convert.FromBase64String(sIV);//指定加密的运算模式mCSP.Mode=System.Security.Cryptography.CipherMode.ECB;//获取或设置加密算法的填充模式mCSP.Padding=System.Security.Cryptography.PaddingMode.PKCS7;ct=mCSP.CreateEncryptor(mCSP.Key,mCSP.IV);//创建加密对象byt=Encoding.UTF8.GetBytes(Value);ms=newMemoryStream();cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);cs.Write(byt,0,byt.Length);cs.FlushFinalBlock();cs.Close();returnConvert.ToBase64String(ms.ToArray());}catch(Exceptionex){//MessageBox.Show(ex.Message,"出现异常",MessageBoxButtons.OK,MessageBoxIcon.Warning);return("输入的秘钥有误!"+ex.Message);}}///<summary>///解密字符串///</summary>///<paramname="Value">加密后的字符串</param>///<paramname="sKey">密钥,必须32位</param>///<paramname="sIV">向量,必须是12个字符</param>///<returns>解密后的字符串</returns>publicstringDecryptString(stringValue,stringsKey,stringsIV){try{ICryptoTransformct;//加密转换运算MemoryStreamms;//内存流CryptoStreamcs;//数据流连接到数据加密转换的流byte[]byt;//将3DES的密钥转换成bytemCSP.Key=Convert.FromBase64String(sKey);//将3DES的向量转换成bytemCSP.IV=Convert.FromBase64String(sIV);mCSP.Mode=System.Security.Cryptography.CipherMode.ECB;mCSP.Padding=System.Security.Cryptography.PaddingMode.PKCS7;ct=mCSP.CreateDecryptor(mCSP.Key,mCSP.IV);//创建对称解密对象byt=Convert.FromBase64String(Value);ms=newMemoryStream();cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);cs.Write(byt,0,byt.Length);cs.FlushFinalBlock();cs.Close();returnEncoding.UTF8.GetString(ms.ToArray());}catch(Exceptionex){//MessageBox.Show(ex.Message,"出现异常",MessageBoxButtons.OK,MessageBoxIcon.Warning);return("输入的秘钥有误!"+ex.Message);}}#endregion}}这是我的代码
解决方案四:
你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事
解决方案五:
3DES加密,密文是24位,而且是数字+字母+等号,相当于37进制而你要转成16位16进制数,必然损失精度,导致无法还原
解决方案六:
引用3楼Z65443344的回复:

你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事

但是我看有些软件用3DES加密出来的密文就是16进制的啊,这是怎么回事?
解决方案七:
你确定他是用3DES,而不是别的?
解决方案八:
引用5楼ykai_king的回复:

Quote: 引用3楼Z65443344的回复:
你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事

但是我看有些软件用3DES加密出来的密文就是16进制的啊,这是怎么回事?

是啊上面加密方式是自己选的我点的3des出来的就是16进制的啊
解决方案九:
引用7楼ykai_king的回复:

Quote: 引用5楼ykai_king的回复:
Quote: 引用3楼Z65443344的回复:
你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事

但是我看有些软件用3DES加密出来的密文就是16进制的啊,这是怎么回事?

是啊上面加密方式是自己选的我点的3des出来的就是16进制的啊

你去看看这个也行http://bbs.csdn.net/topics/390514420
解决方案十:
byte[]buff=cs.ToArray()stringresult=BitConverter.ToString(buff);请仔细看回你的代码,是自己把16进制转字符串的:Convert.ToBase64String(ms.ToArray());
解决方案十一:
引用9楼CGabriel的回复:

byte[]buff=cs.ToArray()stringresult=BitConverter.ToString(buff);请仔细看回你的代码,是自己把16进制转字符串的:Convert.ToBase64String(ms.ToArray());

现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊
解决方案十二:
引用10楼ykai_king的回复:

现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊

简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接
解决方案十三:
引用11楼Z65443344的回复:

Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊

简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接

replace("-","")这两个参数是什么?
解决方案十四:
引用12楼ykai_king的回复:

Quote: 引用11楼Z65443344的回复:
Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊

简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接

replace("-","")这两个参数是什么?

就是把字符串中的“-”替换成“”空格了,你也可设置能“”,这样就没有“-”了。lz连replace("-","")都看不明白,就让lz写加密的东西,难为lz了
解决方案十五:
引用13楼mjp1234airen4385的回复:

Quote: 引用12楼ykai_king的回复:
Quote: 引用11楼Z65443344的回复:
Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊

简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接

replace("-","")这两个参数是什么?

就是把字符串中的“-”替换成“”空格了,你也可设置能“”,这样就没有“-”了。lz连replace("-","")都看不明白,就让lz写加密的东西,难为lz了

我就不是搞软件的,但是硬件上要用,看不懂也得搞出来
解决方案:
引用14楼ykai_king的回复:

Quote: 引用13楼mjp1234airen4385的回复:
Quote: 引用12楼ykai_king的回复:
Quote: 引用11楼Z65443344的回复:
Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊

简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接

replace("-","")这两个参数是什么?

就是把字符串中的“-”替换成“”空格了,你也可设置能“”,这样就没有“-”了。lz连replace("-","")都看不明白,就让lz写加密的东西,难为lz了

我就不是搞软件的,但是硬件上要用,看不懂也得搞出来

100个赞。
解决方案:
本身3DES加密后拿到的就是一个byte数组,你直接循环数组,每个字节ToString("X2"),最后合起来就是你要的。你的这个结果是经过Base64编码后的。
解决方案:
假设你本来的代码…………cs.FlushFinalBlock();byte[]outbuffer=ms.ToArray();returnSystem.Convert.ToBase64String(outbuffer);改为…………cs.FlushFinalBlock();byte[]outbuffer=ms.ToArray();StringBuildersb=newStringBuilder();for(inti=0;i<outbuffer.Length;i++){sb.Append(outbuffer[i].ToString("X2"));}returnsb.ToString();

时间: 2025-01-09 02:06:01

我用3DES加密后怎么样才能得到16位的密文的相关文章

php 3des加密.net无法解析

问题描述 php 3des加密.net无法解析 因项目需要,需要与对方的接口对接 ,对方是.net开发的,需要与我们的php对接,但是php 3des加密后,.net的无法解析,且加密后的字符串与.net加密后的字符串,前半部分一样,后半部分就不一样!,也就是说加密后的字符串不相等,有高手吗,高分求解? .net程序: public static string Encrypt3DES(string a_strString, string a_strKey) { TripleDESCryptoSe

有哪位大神能指导下有哪种算法可以将十六进制的32位的加密成16位的吗,并且是可逆的加密,急求啊

问题描述 MD5是可以,但是是不可逆的.不能解密成原文.貌似3DES和DES加密结果是32,24位什么的我这里的需求是用3DES加密16位的明文,也要得到16位的密文.还要通过3DES解密回去.现在是得到了一个32位的密文 解决方案 解决方案二:自己来顶顶咯

【推荐】JAVA基础◆浅谈3DES加密解密

浅谈3DES加密解密   (注:本文不深入探讨3DES的加密原理,只着重说明在Java中使用3DES加密解密以及常见问题)       从数据安全谈起       当你使用网银时,是否担心你的银行卡会被盗用?     当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露?     作为开发者,编写安全的代码比编写优雅的代码更重要,因为安全是一切应用之根本!为了确保数据不被侵犯,数据加密/解密技术运用而生.    --摘录自<Java加密解密的艺术>       所以为了确保数据传输和数据存储的

运用的一个简单示例对3DES加密

加密|示例 提要 命名空间:System.Security.Cryptography.TripleDES 类简单说明: 表示三重数据加密标准算法的基类,TripleDES 的所有实现都必须从此基类派生,但TripleDES是从 SymmetricAlgorithm 类里继承出来.TripleDES 使用 DES 算法的三次连续迭代.它可以使用两个或三个 56 位密钥.      使用目的:比较安全的加密一种方式,密钥和矢量的不同,会生产不同的加密字串.因为是DES算法的三次连续迭代,而且算法可逆

字符串-网页上传文件时怎么把文件加密后上传

问题描述 网页上传文件时怎么把文件加密后上传 我想在html页面选择一个上传文件,在js获得这个文件的信息,然后对这个文件进行对称加密后再上传.初步想法是把文件是以数据流发到后台再生成一个完整文件的,但怎么获得这个文件的数据流?另一个想法是把先把文件转成字符串,然后加密,再把字符串生成文件2,然后上传,但怎样才能转成字符串并且把加密的字符串转回文件?请大神解答,感激不尽 解决方案 在Web架构中如果要保密, 最简单最安全的方法是使用HTTPS协议. 用js获取文件数据流是可以的, 但需要新版浏览

如何用给定密钥进行3DES加密

问题描述 如何用给定密钥进行3DES加密 最近在研究3DES加密的问题,在网上找了一下基本都是http://www.cnblogs.com/mailingfeng/archive/2011/07/29/2120507.html这样的一段代码,我想问的是如果规定了一个字符串要用给定的密钥如:abcdabcd去加密,要怎么做?能不能贴一点代码参考一下? 解决方案 我现在做给一个24个字节的字符串加密,密钥是abcdabcd,加密后转为16进制字符串长度为48个字节,请问怎么实现? 解决方案二: 加密

javascript-C#解密一段加密后的Js代码

问题描述 C#解密一段加密后的Js代码 eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp(''+e(c)+''

C语言单片和C#语言服务器端DES及3DES加密的实现

原文:C语言单片和C#语言服务器端DES及3DES加密的实现 公司最近在做单片机和C#语言的通信.用的是Socket通信.传输的数据是明文,后来 在会上讨论准备用DES加密(对称加密)来做. 双方约定 相应的"密钥". 以前做的加密一般都是用C#加密和C#解密.一直以为是个简单的问题,现在和用C写的单片机通信的时候却出了问题. 问题是什么呢? 我找了几个在线加密 解密的网站,还下了几个加密解密的工具.结果相同的数据,用相同的密钥却得到不同的结果. 而且现在网上C语言实现的DES资料基本

[J2SE]Java中3DES加密解密调用示例_JSP编程

jce.jar security/US_export_policy.jar security/local_policy.jar ext/sunjce_provider.jar Java运行时会自动加载这些包,因此对于带main函数的应用程序不需要设置到CLASSPATH环境变量中.对于WEB应用,不需要把这些包加到WEB-INF/lib目录下. 以下是java中调用sun公司提供的3DES加密解密算法的样本代码: 复制代码 代码如下: /*字符串 DESede(3DES) 加密*/ import