像这样的地址:
http://dotnet.aspx.cc/ShowDetail.aspx?id=CF5FFABC-CFE1-4368-3C13-9B4FCD7C7168要加密、解密的方法~~像CF5FFABC-CFE1-4368-3C13-9B4FCD7C7168 这样是怎么加密的呢?
 我自己做的加密怎么搞都是类似 fkxdVVmx3+o=  这样的!实在不好看~而且在接收页解密这个串的时候还会出错! 请教高人是怎么回事,望帖出详细的方法出来,重分奖赏!!!在线等待!解决马上结帖!谢谢!

解决方案 »

  1.   

    晕 那个 不是加密地址吧!
    是使用了ID非INT类型的 ID参数
      

  2.   

    用GUID做文章表的ID而已,不是什么加密
    一般的表用Identity做ID, 孟孟用NEWID()做也一样
      

  3.   

    晕啊,那不是加密,而是采用的 SQL SERVER 里的 uniqueidentifier 字段类型,设置为 RowGuid 就 OK 了
      

  4.   

    数据 ID 类型 使用了
    uniqueidentifier 类型
    全局唯一标识符 (GUID)。
      

  5.   

    注释
    uniqueidentifier 数据类型的列或局部变量可用两种方法初始化为一个值: 使用 NEWID 函数。
    将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字)。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 uniqueidentifier 值。 
    比较运算符可与 uniqueidentifier 值一起使用。然而,排列并非通过比较两个值的位模式来实现。允许对 uniqueidentifier 值执行的操作只有比较 (=, <>, <, >, <=, >=) 和检查 NULL(IS NULL 和 IS NOT NULL)。不允许使用其它算术运算符。所有的列约束及属性(IDENTITY 除外)均允许用于 uniqueidentifier 数据类型。 
      

  6.   

    System.Guid.NewGuid 就可以产生那个东东了。
      

  7.   

    哎,很简单的是,你在你的文章表里,添加一个字段,名字叫guid把他的类型设置成uniqueidentifier    ‘SQL默认用这个存放GUID值的,你也可以用别的字段,但是最好最好用这个。然后把他的默认设置成newid()然后你添加文章的时候,这个默认就添加了一个GUID,GUID是唯一性的ID,,
      

  8.   

    那只是用了GUID,不是用自增长的ID。
      

  9.   

    就在本站有GUID的SQL生成的例子的,搜一搜吧。
      

  10.   

    和identity相比他有什么优点吗?
    孟孟是不是故意做成这样的呀,表示文章是唯一的吗
      

  11.   

    网上很多人在问怎么实现Web系统URL传输(表单提交)参数加密。例如:要进行一个用户帐号编辑,要传递用户的ID,URL如下:http://localhost/mysystem/editAccounts.aspx?ID=2
    但又不想让别人知道这个用户的ID为2,恶意的使用者可能还会将2修改,改为别的用户ID。
    加密传递的参数值可以解决问题。
    以下是自己写的DEC加密、解密的基类。文件名:Security.CSusing System;
    using System.Security.Cryptography;
    using System.IO;
    using System.Text;namespace EIP.Framework
    {
     /// 
     /// Security 的摘要说明。
     /// Security类实现.NET框架下的加密和解密。
     /// CopyRight [email protected]@[email protected]
     /// 
     public class Security
     {
      string _QueryStringKey = "abcdefgh"; //URL传输参数加密Key
      string _PassWordKey = "hgfedcba";  //PassWord加密Key  public Security()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }  /// 
      /// 加密URL传输的字符串
      /// 
      /// 
      /// 
      public string EncryptQueryString(string QueryString)
      {
       return Encrypt(QueryString,_QueryStringKey);
      }  /// 
      /// 解密URL传输的字符串
      /// 
      /// 
      /// 
      public string DecryptQueryString(string QueryString)
      {
       return Decrypt(QueryString,_QueryStringKey);
      }  /// 
      /// 加密帐号口令
      /// 
      /// 
      /// 
      public string EncryptPassWord(string PassWord)
      {
       return Encrypt(PassWord,_PassWordKey);
      }  /// 
      /// 解密帐号口令
      /// 
      /// 
      /// 
      public string DecryptPassWord(string PassWord)
      {
       return Decrypt(PassWord,_PassWordKey);
      }
      
      /// 
      /// DEC 加密过程
      /// 
      /// 
      /// 
      /// 
      public string Encrypt(string pToEncrypt,string sKey)  
      {  
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();  //把字符串放到byte数组中  
       
       byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);  
       //byte[]  inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);  
      
       des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  //建立加密对象的密钥和偏移量
       des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);   //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 
       MemoryStream ms = new MemoryStream();     //使得输入密码必须输入英文文本
       CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);  
     
       cs.Write(inputByteArray, 0, inputByteArray.Length);  
       cs.FlushFinalBlock();     StringBuilder ret = new  StringBuilder();  
       foreach(byte b in ms.ToArray())  
       {  
        ret.AppendFormat("{0:X2}", b);  
       }  
       ret.ToString();  
       return  ret.ToString();  
      }    /// 
      /// DEC 解密过程
      /// 
      /// 
      /// 
      /// 
      public string Decrypt(string pToDecrypt, string sKey)  
      {  
       DESCryptoServiceProvider des = new 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 = ASCIIEncoding.ASCII.GetBytes(sKey);  //建立加密对象的密钥和偏移量,此值重要,不能修改  
       des.IV  = ASCIIEncoding.ASCII.GetBytes(sKey);  
       MemoryStream ms = new MemoryStream();  
       CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);  
       
       cs.Write(inputByteArray, 0, inputByteArray.Length);  
       cs.FlushFinalBlock();     StringBuilder ret = new StringBuilder();  //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象  
                 
       return System.Text.Encoding.Default.GetString(ms.ToArray());  
      }   /// 
      /// 检查己加密的字符串是否与原文相同
      /// 
      /// 
      /// 
      /// 
      /// 
      public bool ValidateString(string EnString, string FoString, int Mode)
      {
       switch (Mode)
       {
        default:
        case 1:
         if (Decrypt(EnString,_QueryStringKey) == FoString.ToString())
         {
          return true;
         }
         else
         {
          return false;
         }
        case 2:
         if (Decrypt(EnString,_PassWordKey) == FoString.ToString())
         {
          return true;
         }
         else
         {
          return false;
         }
       }
      }
     }
    }类中URL及帐号加密使用了不同的KEY。调用URL加密过程如下:
    EIP.Framework.Security objSecurity = new EIP.Framework.Security();
    objSecurity.EncryptQueryString(''待加密的字符串'');解密:objSecurity.DecryptQueryString(''传递过来的参数);
      

  12.   

    用GUID的类型作为主键,默认值用newid(),这样也不好啊!主键的值是默认值提供的话,你的程序必须要刷新以后才能继续修改这个纪录。我一般的做法,在程序中用coCreateGUID生成一个GUID填写进去,然后post这个新纪录,不让SQL Server的默认值发挥作用,这样不用刷新就可以继续修改这个新纪录。要知道刷新会很慢的!
      

  13.   

    对网页地址有什么好奇的。从原来的jsp到现在的.net都可以很方便的做出各种地址效果。有什么用。
      

  14.   

    这个不是加密
    数据库主键默认设置newid()即可
      

  15.   

    谢谢楼上兄台的热心回复! 最后请教一下, 我在c#要调用这个ID应该怎么转换此类型啊?
     =======================================
    “/”应用程序中的服务器错误。
    --------------------------------------------------------------------------------输入字符串的格式不正确。 
      int _TotalRows = int.Parse(config.con.conGetCount("ID","Info","None")); 原来是INT型的哦
      

  16.   

    回楼上的兄台 zipo:
       你的加密方法不错!!!!!!!!能否使加密之后的长度再长一些?
      

  17.   

    zipo(知其然,不知其所以然!) 发的不错,有用