当前位置:编程学习 > C#/ASP.NET >>

加到300分,求在JAVA下的“PBEWithMD5AndDES”加密算法,到C#下如何实现?(三)


加到300分

输入字串:这是一个测试
输出字串:09IdjpQQAPgniEaO/skp9gy8+LkD42fZ

输入字串:123456
输出字串:OEnU8DEcgsE=

以下是JAVA的源代码,想求一下在C#使用哪种函数能实现同样的加密算法。

一、http://topic.csdn.net/u/20120212/20/077d891b-d861-417d-8df0-aa973eb46bbf.html

二、http://topic.csdn.net/u/20120214/23/bdc9f555-30c9-4534-bca6-e6b69000a4fe.html

三、本帖




//07
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

//09
import java.security.MessageDigest;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

//BASE64
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class pubwin2009
{


    // key1 姓名身份证加解密 07/09 
     public static String Rcode(String message,int type)throws Exception
        {
            //String Key="123!@#qweQWE/.,?><abc";    //07
            String Key="q1!2@3#we>WacE/.Q,?<b";        //09
            byte _fldint[] = { -87, -101, -56, 50, 86, 53, -29, 3};
            byte bytesrc[]; 
            if (type==1)
            bytesrc =message.getBytes("UTF8");
            else
            bytesrc =(new BASE64Decoder()).decodeBuffer(message);
            PBEParameterSpec pbeparameterspec = new PBEParameterSpec(_fldint,19);
            PBEKeySpec pbekeyspec = new PBEKeySpec(Key.toCharArray());
            SecretKeyFactory secretkeyfactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
            javax.crypto.SecretKey secretkey = secretkeyfactory.generateSecret(pbekeyspec);
            Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
            cipher.init(type, secretkey, pbeparameterspec);
            byte[] retByte = cipher.doFinal(bytesrc); 
            if (type==1)
            return new BASE64Encoder().encode(retByte);
            else
            return new String(retByte,"UTF8");
       
        }
    //09会员密码 db.properties 加解密
    public static String decrypt(String message,int type) throws Exception {   
            String keye = "hi%$so78"; //MD5
            String keyb = "12up56^&"; //IvParameterSpec
            byte bytesrc[]; 
            if (type==1)
            bytesrc =message.getBytes();
            else
            bytesrc =(new BASE64Decoder()).decodeBuffer(message);
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(keye.getBytes());
            DESKeySpec desKeySpec = new DESKeySpec(md5.digest()); 
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");      
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);   
            IvParameterSpec iv  = new IvParameterSpec(keyb.getBytes("UTF-8"));
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  
            cipher.init(type, secretKey, iv);         
            byte[] retByte = cipher.doFinal(bytesrc); 
            if (type==1)
            return new BASE64Encoder().encode(retByte);
            else
            return new String(retByte);
    } 
    
        public static void main(String args[]) throws Exception 
        {
            System.out.println( "\n姓名身份证加密:这是一个测试 -> " +Rcode("这是一个测试",1));
            System.out.println( "姓名身份证解密:09IdjpQQAPgniEaO/skp9gy8+LkD42fZ -> " +Rcode("09IdjpQQAPgniEaO/skp9gy8+LkD42fZ",2)+"\n");

            System.out.println( "09会员密码加解:123456 -> " +decrypt("123456",1));
            System.out.println( "09会员密码解密:OEnU8DEcgsE= -> " +decrypt("OEnU8DEcgsE=",2));

            System.exit(0);
        }

}



--------------------编程问答-------------------- 是我来错了吗?这里是.ner非技术区啊 --------------------编程问答-------------------- MD5加密?

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(this.pwd.Text.Trim(), "MD5");
--------------------编程问答-------------------- 帮顶. --------------------编程问答-------------------- md5加密 --------------------编程问答--------------------
如果是MD5,就不来劳烦各位了。

这个加密算法是可逆的,从这一点上就可以知道不是MD5了。

不过还是谢谢你的回答。

引用 2 楼 gflhy521 的回复:
MD5加密?

C# code
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(this.pwd.Text.Trim(), "MD5");


--------------------编程问答--------------------
身份证加密解密已经解决,请jshi123进来接分。


另密码加密与解密和问题是否也能帮解决一下,我另加100分。谢谢了。


功能是JAVA源码中的“decrypt”函数。

输入字串:123456
输出字串:OEnU8DEcgsE=
--------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace m5
{
    public class MD5Class
    {
        #region MD5加密解密
        //使用下边的加密规则字符串
        //??b???W
        static string key = "??b???W";
        public MD5Class()
        {

        }

        // 创建KEY

        public string GenerateKey()
        {
            System.Security.Cryptography.DESCryptoServiceProvider desCrypto = (System.Security.Cryptography.DESCryptoServiceProvider)System.Security.Cryptography.DESCryptoServiceProvider.Create();
            return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
        }

        // MD5加密
        //pToEncrypt为要加密的字符串
        public string MD5Encrypt(string pToEncrypt)
        {
            string sKey = key;
            System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.DESCryptoServiceProvider();
            byte[] inputByteArray = System.Text.Encoding.Default.GetBytes(pToEncrypt);
            des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(sKey);
            des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(sKey);
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            System.Text.StringBuilder ret = new System.Text.StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            ret.ToString();
            return ret.ToString();
        }

        // MD5解密
        //pToDecrypt为要解密的字符串
        public string MD5Decrypt(string pToDecrypt)
        {
            string sKey = key;
            System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.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 = System.Text.ASCIIEncoding.ASCII.GetBytes(sKey);
            des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(sKey);
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            System.Text.StringBuilder ret = new System.Text.StringBuilder();
            return System.Text.Encoding.Default.GetString(ms.ToArray());
        }
        #endregion
    }
}
   


--------------------编程问答-------------------- 楼上的答案不太对呢。

正确答案jshi123已经给了,请这位朋友进来接分。

下面朋友就不用再回复了。谢谢支持。



引用 7 楼 yanlele424 的回复:
C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace m5
{
    public class MD5Class
    {
        #region MD5加……
--------------------编程问答-------------------- 这里发言,表示您接受了CSDN社区的用户行为准则。
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,