精华内容
下载资源
问答
  • 常用三种加密,解密方法(md5,硬盘,对称),网页,桌面程序通用亲测可用!
  • 一、常用的加密/解密算法 1.Base64  严格来说Base64并不是一种加密/解密算法,而是一种编码方式。Base64不生成密钥,通过Base64编码后的密文就可以直接“翻译”为明文,但是可以通过向明文中添加混淆字符来达到...
  • ASP常用加密解密方法

    2009-05-13 10:17:14
    ASP常用加密解密方法,包括ASP ,html ,js ,vbs 等编码与反编码 还有简易ASP 加密解密小程序
  • 常用加密解密方法

    千次阅读 2013-01-24 12:44:52
    1、常用密钥算法 密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合; 3DES(Triple DES):是...
    一、数据加密/编码算法列表
    
    常见用于保证安全的加密或编码算法如下:
    1、常用密钥算法
    密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括:
    DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
    3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
    RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快;
    IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
    RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;
    DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
    AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;
    BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
    其它算法,如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。
    2、单向散列算法
    单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:
    MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;
    SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;
    MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。
    CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传 输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。
    3、其它数据算法
    其它数据算法包括一些常用编码算法及其与明文(ASCII、Unicode 等)转换等,如 Base 64、Quoted Printable、EBCDIC 等。

    二、算法的 .NET 实现
    常见的加密和编码算法都已经在 .NET Framework中得到了实现,为编码人员提供了极大的便利性,实现这些算法的名称空间是:System.Security.Cryptography。
    System.Security.Cryptography 命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法、随机数字生成和消息身份验证。
    System.Security.Cryptography 是按如下方式组织的:
    1、私钥加密
    私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换。
    .NET Framework 提供以下实现私钥加密算法的类:
    DES:DESCryptoServiceProvider
    RC2:RC2CryptoServiceProvider
    Rijndael(AES):RijndaelManaged
    3DES:TripleDESCryptoServiceProvider
    2、公钥加密和数字签名
    公 钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证。公钥 可以被任何人使用;该密钥用于加密要发送到私钥持有者的数据。两个密钥对于通信会话都是唯一的。公钥加密算法也称为不对称算法,原因是需要用一个密钥加密 数据而需要用另一个密钥来解密数据。
    .NET Framework 提供以下实现公钥加密算法的类:
    DSA:DSACryptoServiceProvider
    RSA:RSACryptoServiceProvider
    3、哈希(Hash)值
    哈 希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明 文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验 数据的完整性。
    .NET Framework 提供以下实现数字签名算法的类:
    HMAC:HMACSHA1 (HMAC 为一种使用密钥的 Hash 算法)
    MAC:MACTripleDES
    MD5:MD5CryptoServiceProvider
    SHA1:SHA1Managed、SHA256Managed、SHA384Managed、SHA512Managed
    4、随机数生成
    加密密钥需要尽可能地随机,以便使生成的密钥很难再现,所以随机数生成是许多加密操作不可分割的组成部分。
    在 .NET Framework 中,RNGCryptoServiceProvider 是随机数生成器算法的实现,对于数据算法,.NET Framework 则在其它命名空间中实现,如 Convert 类实现 Base 64 编码,System.Text 来实现编码方式的转换等。
    从 以上来看,.NET Framework 对于数据加密/编码还是支持比较好,大大地方便了开发人员,但美中不足的是,.NET Framework 中的数据加密算法仍然不够完全,如 IDEA、BLOWFISH、其它算法,如ElGamal、Deffie-Hellman、ECC 等,对于一些其它的数据校验算法支持也不够,如 CRC、SFV 等,开发人员只能去从早期代码做移植或者寻找第三方厂商的实现。

    下面本就简单介绍在项目中常用的加密及解密的方法
    一、MD5加密算法[.NET类库中自带的算法 MD5是个不可逆的算法 没有解密的算法]
    其实在ASP.Net编程中加密数据。在DotNet中有自带的类:System.Web.Security.HashPasswordForStoringInConfigFile()

    public string md5(string str,int code)
    {
    if(code==16) //16位MD5加密(取32位加密的9~25字符)
    {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
    }

    if(code==32) //32位加密
    {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower();
    }

    return "00000000000000000000000000000000";
    }

    简单的使用:
    //--导入所需要的包
    using System.IO;
    using System.Text;
    using System.Security.Cryptography;
    (1)MD5普通加密
    //获取要加密的字段,并转化为Byte[]数组
            byte[] data = System.Text.Encoding.Unicode
            .GetBytes(TextBox1.Text.ToCharArray());
            //建立加密服务
            System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            //加密Byte[]数组
            byte[] result = md5.ComputeHash(data);
            Label1.Text = "MD5普通加密:" + System.Text.Encoding.Unicode.GetString(result);
    (2)MD5密码加密[常用]
    Label1.Text = "MD5密码加密:" + System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox1.Text, "MD5");

    (3)ASP.NET中加密与解密QueryString的方法[常用]
    //加密
    Response.Redirect("DetailInfo.aspx?id=" + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes("whaben")).Replace("+","%2B"));

    //解密
    string ID = System.Text.Encoding.Default.GetString(Convert.FromBase64String(Request.QueryString["id"].ToString().Replace("%2B","+")));

    二、DES加密及解密的算法[常用密钥算法]

    简单的使用:
    //--导入所需要的包
    using System.IO;
    using System.Text;
    using System.Security.Cryptography;
    public static string Key = "DKMAB5DE";//加密密钥必须为8位
    //加密算法
    public static string MD5Encrypt(string pToEncrypt)
           {
               DESCryptoServiceProvider des = new DESCryptoServiceProvider();
               byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
               des.Key = ASCIIEncoding.ASCII.GetBytes(Key);
               des.IV = ASCIIEncoding.ASCII.GetBytes(Key);
               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();

           }


    //解密算法
    public static string MD5Decrypt(string pToDecrypt)
           {
               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(Key);
               des.IV = ASCIIEncoding.ASCII.GetBytes(Key);
               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();
               return System.Text.Encoding.ASCII.GetString(ms.ToArray());

           }

    三、RSA加密及解密的算法[常用密钥算法]
    简单的使用:
    //--导入所需要的包
    using System.Text;
    using System.Security.Cryptography;
    //加密算法
    public string RSAEncrypt(string encryptString)
        {
            CspParameters csp = new CspParameters();
            csp.KeyContainerName = "whaben";
            RSACryptoServiceProvider RSAProvider = new RSACryptoServiceProvider(csp);
            byte[] encryptBytes = RSAProvider.Encrypt(ASCIIEncoding.ASCII.GetBytes(encryptString), true);
            string str = "";
            foreach (byte b in encryptBytes)
            {
                str = str + string.Format("{0:x2}", b);
            }
            return str;
        }
    //解密算法
    public string RSADecrypt(string decryptString)
        {
            CspParameters csp = new CspParameters();
            csp.KeyContainerName = "whaben";
            RSACryptoServiceProvider RSAProvider = new RSACryptoServiceProvider(csp);
            int length = (decryptString.Length / 2);
            byte[] decryptBytes = new byte[length];
            for (int index = 0; index < length; index++)
            {
                string substring = decryptString.Substring(index * 2, 2);
                decryptBytes[index] = Convert.ToByte(substring, 16);
            }
            decryptBytes = RSAProvider.Decrypt(decryptBytes, true);
            return ASCIIEncoding.ASCII.GetString(decryptBytes);
        }
    展开全文
  • Java中常用的加密与解密方法

    千次阅读 2019-06-14 15:37:50
    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密方法,仍然无法了解信息的内容。大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些...

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些资料将加密直接分为对称加密和非对称加密)。 

    双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文。而单向加密只是对信息进行了摘要计算,不能通过算法生成明文,单向加密从严格意思上说不能算是加密的一种,应该算是摘要算法吧。具体区分可以参考: 
    (本人解释不清呢 …… ) 
    http://security.group.iteye.com/group/wiki/1710-one-way-encryption-algorithm 

     

    一、双向加密

    (一)、对称加密

    采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 
    需要对加密和解密使用相同密钥的加密算法。由于其速度,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。 
    所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。 

    算法是一组规则,规定如何进行加密和解密。因此对称式加密本身不是安全的。    
    常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等 
     

    对称加密一般java类中中定义成员

    Java代码

     

     
    1. //KeyGenerator 提供对称密钥生成器的功能,支持各种算法

    2. private KeyGenerator keygen;

    3. //SecretKey 负责保存对称密钥

    4. private SecretKey deskey;

    5. //Cipher负责完成加密或解密工作

    6. private Cipher c;

    7. //该字节数组负责保存加密的结果

    8. private byte[] cipherByte;

    9.  

     

    在构造函数中初始化

    Java代码

     

     
    1. Security.addProvider(new com.sun.crypto.provider.SunJCE());

    2. //实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)

    3. keygen = KeyGenerator.getInstance("DES");//

    4. //生成密钥

    5. deskey = keygen.generateKey();

    6. //生成Cipher对象,指定其支持的DES算法

    7. c = Cipher.getInstance("DES");

     

    1. DES算法

     

    DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组, 密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。 
     

    Java代码

     

     
    1. import java.security.InvalidKeyException;

    2. import java.security.NoSuchAlgorithmException;

    3. import java.security.Security;

    4.  
    5. import javax.crypto.BadPaddingException;

    6. import javax.crypto.Cipher;

    7. import javax.crypto.IllegalBlockSizeException;

    8. import javax.crypto.KeyGenerator;

    9. import javax.crypto.NoSuchPaddingException;

    10. import javax.crypto.SecretKey;

    11.  
    12. public class EncrypDES {

    13.  
    14. //KeyGenerator 提供对称密钥生成器的功能,支持各种算法

    15. private KeyGenerator keygen;

    16. //SecretKey 负责保存对称密钥

    17. private SecretKey deskey;

    18. //Cipher负责完成加密或解密工作

    19. private Cipher c;

    20. //该字节数组负责保存加密的结果

    21. private byte[] cipherByte;

    22.  
    23. public EncrypDES() throws NoSuchAlgorithmException, NoSuchPaddingException{

    24. Security.addProvider(new com.sun.crypto.provider.SunJCE());

    25. //实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)

    26. keygen = KeyGenerator.getInstance("DES");

    27. //生成密钥

    28. deskey = keygen.generateKey();

    29. //生成Cipher对象,指定其支持的DES算法

    30. c = Cipher.getInstance("DES");

    31. }

    32.  
    33. /**

    34. * 对字符串加密

    35. *

    36. * @param str

    37. * @return

    38. * @throws InvalidKeyException

    39. * @throws IllegalBlockSizeException

    40. * @throws BadPaddingException

    41. */

    42. public byte[] Encrytor(String str) throws InvalidKeyException,

    43. IllegalBlockSizeException, BadPaddingException {

    44. // 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式

    45. c.init(Cipher.ENCRYPT_MODE, deskey);

    46. byte[] src = str.getBytes();

    47. // 加密,结果保存进cipherByte

    48. cipherByte = c.doFinal(src);

    49. return cipherByte;

    50. }

    51.  
    52. /**

    53. * 对字符串解密

    54. *

    55. * @param buff

    56. * @return

    57. * @throws InvalidKeyException

    58. * @throws IllegalBlockSizeException

    59. * @throws BadPaddingException

    60. */

    61. public byte[] Decryptor(byte[] buff) throws InvalidKeyException,

    62. IllegalBlockSizeException, BadPaddingException {

    63. // 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式

    64. c.init(Cipher.DECRYPT_MODE, deskey);

    65. cipherByte = c.doFinal(buff);

    66. return cipherByte;

    67. }

    68.  
    69. /**

    70. * @param args

    71. * @throws NoSuchPaddingException

    72. * @throws NoSuchAlgorithmException

    73. * @throws BadPaddingException

    74. * @throws IllegalBlockSizeException

    75. * @throws InvalidKeyException

    76. */

    77. public static void main(String[] args) throws Exception {

    78. EncrypDES de1 = new EncrypDES();

    79. String msg ="郭XX-搞笑相声全集";

    80. byte[] encontent = de1.Encrytor(msg);

    81. byte[] decontent = de1.Decryptor(encontent);

    82. System.out.println("明文是:" + msg);

    83. System.out.println("加密后:" + new String(encontent));

    84. System.out.println("解密后:" + new String(decontent));

    85. }

    86.  
    87. }

     

    2. 3DES

     

      3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对3DES 
    数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。    
    3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法,其具体实现如下: 
    设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文, 
    这样,    
    3DES加密过程为:C=Ek3(Dk2(Ek1(P))) 
    3DES解密过程为:P=Dk1((EK2(Dk3(C))) 

     

    Java代码

     

     
    1. import java.security.InvalidKeyException;

    2. import java.security.NoSuchAlgorithmException;

    3. import java.security.Security;

    4.  
    5. import javax.crypto.BadPaddingException;

    6. import javax.crypto.Cipher;

    7. import javax.crypto.IllegalBlockSizeException;

    8. import javax.crypto.KeyGenerator;

    9. import javax.crypto.NoSuchPaddingException;

    10. import javax.crypto.SecretKey;

    11.  
    12. public class EncrypDES3 {

    13.  
    14. // KeyGenerator 提供对称密钥生成器的功能,支持各种算法

    15. private KeyGenerator keygen;

    16. // SecretKey 负责保存对称密钥

    17. private SecretKey deskey;

    18. // Cipher负责完成加密或解密工作

    19. private Cipher c;

    20. // 该字节数组负责保存加密的结果

    21. private byte[] cipherByte;

    22.  
    23. public EncrypDES3() throws NoSuchAlgorithmException, NoSuchPaddingException {

    24. Security.addProvider(new com.sun.crypto.provider.SunJCE());

    25. // 实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)

    26. keygen = KeyGenerator.getInstance("DESede");

    27. // 生成密钥

    28. deskey = keygen.generateKey();

    29. // 生成Cipher对象,指定其支持的DES算法

    30. c = Cipher.getInstance("DESede");

    31. }

    32.  
    33. /**

    34. * 对字符串加密

    35. *

    36. * @param str

    37. * @return

    38. * @throws InvalidKeyException

    39. * @throws IllegalBlockSizeException

    40. * @throws BadPaddingException

    41. */

    42. public byte[] Encrytor(String str) throws InvalidKeyException,

    43. IllegalBlockSizeException, BadPaddingException {

    44. // 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式

    45. c.init(Cipher.ENCRYPT_MODE, deskey);

    46. byte[] src = str.getBytes();

    47. // 加密,结果保存进cipherByte

    48. cipherByte = c.doFinal(src);

    49. return cipherByte;

    50. }

    51.  
    52. /**

    53. * 对字符串解密

    54. *

    55. * @param buff

    56. * @return

    57. * @throws InvalidKeyException

    58. * @throws IllegalBlockSizeException

    59. * @throws BadPaddingException

    60. */

    61. public byte[] Decryptor(byte[] buff) throws InvalidKeyException,

    62. IllegalBlockSizeException, BadPaddingException {

    63. // 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式

    64. c.init(Cipher.DECRYPT_MODE, deskey);

    65. cipherByte = c.doFinal(buff);

    66. return cipherByte;

    67. }

    68.  
    69. /**

    70. * @param args

    71. * @throws NoSuchPaddingException

    72. * @throws NoSuchAlgorithmException

    73. * @throws BadPaddingException

    74. * @throws IllegalBlockSizeException

    75. * @throws InvalidKeyException

    76. */

    77. public static void main(String[] args) throws Exception {

    78. EncrypDES3 des = new EncrypDES3();

    79. String msg ="郭XX-搞笑相声全集";

    80. byte[] encontent = des.Encrytor(msg);

    81. byte[] decontent = des.Decryptor(encontent);

    82. System.out.println("明文是:" + msg);

    83. System.out.println("加密后:" + new String(encontent));

    84. System.out.println("解密后:" + new String(decontent));

    85.  
    86. }

    87.  
    88. }

     

    3. AES

     

    AES密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 高级加密标准 
    Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。   该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhinedoll"。) 

     

    Java代码:

     

     
    1. import java.security.InvalidKeyException;

    2. import java.security.NoSuchAlgorithmException;

    3. import java.security.Security;

    4.  
    5. import javax.crypto.BadPaddingException;

    6. import javax.crypto.Cipher;

    7. import javax.crypto.IllegalBlockSizeException;

    8. import javax.crypto.KeyGenerator;

    9. import javax.crypto.NoSuchPaddingException;

    10. import javax.crypto.SecretKey;

    11.  
    12. public class EncrypAES {

    13.  
    14. //KeyGenerator 提供对称密钥生成器的功能,支持各种算法

    15. private KeyGenerator keygen;

    16. //SecretKey 负责保存对称密钥

    17. private SecretKey deskey;

    18. //Cipher负责完成加密或解密工作

    19. private Cipher c;

    20. //该字节数组负责保存加密的结果

    21. private byte[] cipherByte;

    22.  
    23. public EncrypAES() throws NoSuchAlgorithmException, NoSuchPaddingException{

    24. Security.addProvider(new com.sun.crypto.provider.SunJCE());

    25. //实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)

    26. keygen = KeyGenerator.getInstance("AES");

    27. //生成密钥

    28. deskey = keygen.generateKey();

    29. //生成Cipher对象,指定其支持的DES算法

    30. c = Cipher.getInstance("AES");

    31. }

    32.  
    33. /**

    34. * 对字符串加密

    35. *

    36. * @param str

    37. * @return

    38. * @throws InvalidKeyException

    39. * @throws IllegalBlockSizeException

    40. * @throws BadPaddingException

    41. */

    42. public byte[] Encrytor(String str) throws InvalidKeyException,

    43. IllegalBlockSizeException, BadPaddingException {

    44. // 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式

    45. c.init(Cipher.ENCRYPT_MODE, deskey);

    46. byte[] src = str.getBytes();

    47. // 加密,结果保存进cipherByte

    48. cipherByte = c.doFinal(src);

    49. return cipherByte;

    50. }

    51.  
    52. /**

    53. * 对字符串解密

    54. *

    55. * @param buff

    56. * @return

    57. * @throws InvalidKeyException

    58. * @throws IllegalBlockSizeException

    59. * @throws BadPaddingException

    60. */

    61. public byte[] Decryptor(byte[] buff) throws InvalidKeyException,

    62. IllegalBlockSizeException, BadPaddingException {

    63. // 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式

    64. c.init(Cipher.DECRYPT_MODE, deskey);

    65. cipherByte = c.doFinal(buff);

    66. return cipherByte;

    67. }

    68.  
    69. /**

    70. * @param args

    71. * @throws NoSuchPaddingException

    72. * @throws NoSuchAlgorithmException

    73. * @throws BadPaddingException

    74. * @throws IllegalBlockSizeException

    75. * @throws InvalidKeyException

    76. */

    77. public static void main(String[] args) throws Exception {

    78. EncrypAES de1 = new EncrypAES();

    79. String msg ="郭XX-搞笑相声全集";

    80. byte[] encontent = de1.Encrytor(msg);

    81. byte[] decontent = de1.Decryptor(encontent);

    82. System.out.println("明文是:" + msg);

    83. System.out.println("加密后:" + new String(encontent));

    84. System.out.println("解密后:" + new String(decontent));

    85. }

    86.  
    87. }

     

     

     

    (二)、非对称加密

    1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥 (privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 
     

    1. RSA 公钥加密算法

     

    RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 

     

    Java代码:

     

     
    1. import java.security.InvalidKeyException;

    2. import java.security.KeyPair;

    3. import java.security.KeyPairGenerator;

    4. import java.security.NoSuchAlgorithmException;

    5. import java.security.interfaces.RSAPrivateKey;

    6. import java.security.interfaces.RSAPublicKey;

    7.  
    8. import javax.crypto.BadPaddingException;

    9. import javax.crypto.Cipher;

    10. import javax.crypto.IllegalBlockSizeException;

    11. import javax.crypto.NoSuchPaddingException;

    12.  
    13. public class EncrypRSA {

    14.  
    15. /**

    16. * 加密

    17. * @param publicKey

    18. * @param srcBytes

    19. * @return

    20. * @throws NoSuchAlgorithmException

    21. * @throws NoSuchPaddingException

    22. * @throws InvalidKeyException

    23. * @throws IllegalBlockSizeException

    24. * @throws BadPaddingException

    25. */

    26. protected byte[] encrypt(RSAPublicKey publicKey,byte[] srcBytes) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{

    27. if(publicKey!=null){

    28. //Cipher负责完成加密或解密工作,基于RSA

    29. Cipher cipher = Cipher.getInstance("RSA");

    30. //根据公钥,对Cipher对象进行初始化

    31. cipher.init(Cipher.ENCRYPT_MODE, publicKey);

    32. byte[] resultBytes = cipher.doFinal(srcBytes);

    33. return resultBytes;

    34. }

    35. return null;

    36. }

    37.  
    38. /**

    39. * 解密

    40. * @param privateKey

    41. * @param srcBytes

    42. * @return

    43. * @throws NoSuchAlgorithmException

    44. * @throws NoSuchPaddingException

    45. * @throws InvalidKeyException

    46. * @throws IllegalBlockSizeException

    47. * @throws BadPaddingException

    48. */

    49. protected byte[] decrypt(RSAPrivateKey privateKey,byte[] srcBytes) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{

    50. if(privateKey!=null){

    51. //Cipher负责完成加密或解密工作,基于RSA

    52. Cipher cipher = Cipher.getInstance("RSA");

    53. //根据公钥,对Cipher对象进行初始化

    54. cipher.init(Cipher.DECRYPT_MODE, privateKey);

    55. byte[] resultBytes = cipher.doFinal(srcBytes);

    56. return resultBytes;

    57. }

    58. return null;

    59. }

    60.  
    61. /**

    62. * @param args

    63. * @throws NoSuchAlgorithmException

    64. * @throws BadPaddingException

    65. * @throws IllegalBlockSizeException

    66. * @throws NoSuchPaddingException

    67. * @throws InvalidKeyException

    68. */

    69. public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {

    70. EncrypRSA rsa = new EncrypRSA();

    71. String msg = "郭XX-精品相声";

    72. //KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象

    73. KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");

    74. //初始化密钥对生成器,密钥大小为1024位

    75. keyPairGen.initialize(1024);

    76. //生成一个密钥对,保存在keyPair中

    77. KeyPair keyPair = keyPairGen.generateKeyPair();

    78. //得到私钥

    79. RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();

    80. //得到公钥

    81. RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();

    82.  
    83. //用公钥加密

    84. byte[] srcBytes = msg.getBytes();

    85. byte[] resultBytes = rsa.encrypt(publicKey, srcBytes);

    86.  
    87. //用私钥解密

    88. byte[] decBytes = rsa.decrypt(privateKey, resultBytes);

    89.  
    90. System.out.println("明文是:" + msg);

    91. System.out.println("加密后是:" + new String(resultBytes));

    92. System.out.println("解密后是:" + new String(decBytes));

    93. }

    94.  
    95. }

     

    2. DSA

    Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。(感觉有点复杂,没有附代码) 
    详见http://63938525.iteye.com/blog/1051565 

     


    (三)、题外话 MySQL加密解密函数

    MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE()。 
    下面是一个简单的实例: 
     

    Mysql代码

     

     
    1. mysql> INSERT INTO users (username,password) VALUES ('joe',ENCODE('guessme','abr'));

    2.  
    3. Query OK, 1 row affected (0.14 sec)

    4.  


    其中,Joe的密码是guessme,它通过密钥abracadabra被加密。要注意的是,加密完的结果是一个二进制字符串,如下所示: 

    提示:虽然ENCODE()和DECODE()这两个函数能够满足大多数的要求,但是有的时候您希望使用强度更高的加密手段。在这种情况下,您可以使用AES_ENCRYPT()和AES_DECRYPT()函数,它们的工作方式是相同的,但是加密强度更高。 


    单向加密与双向加密不同,一旦数据被加密就没有办法颠倒这一过程。因此密码的验证包括对用户输入内容的重新加密,并将它与保存的密文进行比对,看是否匹配。一种简单的单向加密方式是MD5校验码。MySQL的MD5()函数会为您的数据创建一个“指纹”并将它保存起来,供验证测试使用。下面就是如何使用它的一个简单例子: 

    Mysql代码:

     

     
    1. mysql> INSERT INTO users (username,password) VALUES ('joe',MD5('guessme'));

    2.  
    3. Query OK, 1 row affected (0.00 sec)


    或者,您考虑一下使用ENCRYPT()函数,它使用系统底层的crypt()系统调用来完成加密。这个函数有两个参数:一个是要被加密的字符串,另一个是双(或者多)字符的“salt”。它然后会用salt加密字符串;这个salt然后可以被用来再次加密用户输入的内容,并将它与先前加密的字符串进行比对。下面一个例子说明了如何使用它:

     

    Mysql代码:

     

     
    1. mysql> INSERT INTO users (username,password) VALUES('joe', ENCRYPT('guessme','ab'));

    2.  
    3. Query OK, 1 row affected (0.00 sec)


    提示:ENCRYPT()只能用在UNIX、LINIX系统上,因为它需要用到底层的crypt()库。

     

     

     

     

    二、单向加密(信息摘要)

    Java一般需要获取对象MessageDigest来实现单项加密(信息摘要)。

     

     

    1. MD5

     

    MD5  即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。 
    除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等 

     

    Java代码:

     

     
    1. import java.security.MessageDigest;

    2. import java.security.NoSuchAlgorithmException;

    3.  
    4. public class EncrypMD5 {

    5.  
    6. public byte[] eccrypt(String info) throws NoSuchAlgorithmException{

    7. //根据MD5算法生成MessageDigest对象

    8. MessageDigest md5 = MessageDigest.getInstance("MD5");

    9. byte[] srcBytes = info.getBytes();

    10. //使用srcBytes更新摘要

    11. md5.update(srcBytes);

    12. //完成哈希计算,得到result

    13. byte[] resultBytes = md5.digest();

    14. return resultBytes;

    15. }

    16.  
    17.  
    18. public static void main(String args[]) throws NoSuchAlgorithmException{

    19. String msg = "郭XX-精品相声技术";

    20. EncrypMD5 md5 = new EncrypMD5();

    21. byte[] resultBytes = md5.eccrypt(msg);

    22.  
    23. System.out.println("密文是:" + new String(resultBytes));

    24. System.out.println("明文是:" + msg);

    25. }

    26.  
    27. }

     

    2. SHA 

     

    SHA 是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说时对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。

     

    Java代码:

      

     
    1. import java.security.MessageDigest;

    2. import java.security.NoSuchAlgorithmException;

    3.  
    4. public class EncrypSHA {

    5.  
    6. public byte[] eccrypt(String info) throws NoSuchAlgorithmException{

    7. MessageDigest md5 = MessageDigest.getInstance("SHA");

    8. byte[] srcBytes = info.getBytes();

    9. //使用srcBytes更新摘要

    10. md5.update(srcBytes);

    11. //完成哈希计算,得到result

    12. byte[] resultBytes = md5.digest();

    13. return resultBytes;

    14. }

    15.  
    16. /**

    17. * @param args

    18. * @throws NoSuchAlgorithmException

    19. */

    20. public static void main(String[] args) throws NoSuchAlgorithmException {

    21. String msg = "郭XX-精品相声技术";

    22. EncrypSHA sha = new EncrypSHA();

    23. byte[] resultBytes = sha.eccrypt(msg);

    24. System.out.println("明文是:" + msg);

    25. System.out.println("密文是:" + new String(resultBytes));

    26.  
    27. }

    28.  
    29. }


    附件中是以上几种的源代码,附带额外的两种使用方式。 

    增加一种关于文件的哈希算法源代码: 

    Java代码:

     

     
    1. import java.io.FileInputStream;

    2. import java.io.InputStream;

    3. import java.security.MessageDigest;

    4.  
    5. public class FileHashUtil {

    6.  
    7. public static final char[] hexChar = {

    8. '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    9. public static final String[] hashTypes = new String[] { "MD2", "MD5", "SHA1", "SHA-256", "SHA-384", "SHA-512" };

    10.  
    11. public void MD5File(String fileName) throws Exception{

    12. //String fileName = args[0];

    13. System.out.println("需要获取hash的文件为: " + fileName);

    14. java.util.List<MessageDigest> mds = new java.util.ArrayList<MessageDigest>();

    15. for (String hashType : hashTypes) {

    16. MessageDigest md = MessageDigest.getInstance(hashType);

    17. mds.add(md);

    18. }

    19. InputStream fis = null;

    20. try {

    21. fis = new FileInputStream(fileName);

    22. byte[] buffer = new byte[1024];

    23. int numRead = 0;

    24. while ((numRead = fis.read(buffer)) > 0) {

    25. for (MessageDigest md : mds) {

    26. md.update(buffer, 0, numRead);

    27. }

    28. }

    29. } catch (Exception ex) {

    30. ex.printStackTrace();

    31. } finally {

    32. if (fis != null) {

    33. fis.close();

    34. }

    35. }

    36. for (MessageDigest md : mds) {

    37. System.out.println(md.getAlgorithm() + " == " + toHexString(md.digest()));

    38. }

    39. }

    40.  
    41.  
    42. public static void main(String[] args) throws Exception {

    43. String[] fileName = new String[] {"D:/hapfish/ShellFolder.java","D:/hapfish/ShellFolder - 副本.java",

    44. "E:/ShellFolder - 副本.java","E:/ShellFolder.txt","D:/hapfish/ShellFolder.jpg",

    45. "E:/ShellFolder增加字符.txt","D:/hapfish/birosoft.jar"};

    46. FileHashUtil files = new FileHashUtil();

    47. for(int i=0;i<fileName.length;i++){

    48. files.MD5File(fileName[i]);

    49. }

    50.  
    51.  
    52. }

    53.  
    54. public static String toHexString(byte[] b) {

    55. StringBuilder sb = new StringBuilder(b.length * 2);

    56. for (int i = 0; i < b.length; i++) {

    57. sb.append(hexChar[(b[i] & 0xf0) >>> 4]);

    58. sb.append(hexChar[b[i] & 0x0f]);

    59. }

    60. return sb.toString();

    61. }

    62.  
    63. }


    运行说明 :

     

    "D:/hapfish/ShellFolder.java",
    "D:/hapfish/ShellFolder - 副本.java",
    "E:/ShellFolder - 副本.java",
    "E:/ShellFolder.txt",
    "D:/hapfish/ShellFolder.jpg",
    以上五个文件是同一文件经过复制、改扩展名的,最后计算哈希结果是一致的。
    
    "E:/ShellFolder增加字符.txt" 增加了几个字符串,就不一样了
    
    "D:/hapfish/birosoft.jar" 完全不相关的另外一个文件
    

     

    运行结果:

     

    需要获取hash的文件为: D:/hapfish/ShellFolder.java
    MD2 == 3a755a99c5e407005cd45ebd856b4649
    MD5 == 5d08d440fa911d1e418c69a90b83cd86
    SHA1 == 522c8c4f4ff1dd669e251c2ab854c3033a51ca63
    SHA-256 == d1feb0c73c10a759e88bd240cb9d56d0598b4ff83a0704c6679f7ba12f6c4d99
    SHA-384 == 8f8c9da4cd7241c58af3c52b49199033f2dcf3d67f421753999f87511618d9ea2d738e8c16b9b68a7572d06108ff10f6
    SHA-512 == 4711579daee3ddacbaea189310348956cb43bcaaf0099f3be047b06f16c1a20a6b71ee3a4ee018128d647e9f2ef0d644747672238e49a8da3d0cd26dfe597458
    需要获取hash的文件为: D:/hapfish/ShellFolder - 副本.java
    MD2 == 3a755a99c5e407005cd45ebd856b4649
    MD5 == 5d08d440fa911d1e418c69a90b83cd86
    SHA1 == 522c8c4f4ff1dd669e251c2ab854c3033a51ca63
    SHA-256 == d1feb0c73c10a759e88bd240cb9d56d0598b4ff83a0704c6679f7ba12f6c4d99
    SHA-384 == 8f8c9da4cd7241c58af3c52b49199033f2dcf3d67f421753999f87511618d9ea2d738e8c16b9b68a7572d06108ff10f6
    SHA-512 == 4711579daee3ddacbaea189310348956cb43bcaaf0099f3be047b06f16c1a20a6b71ee3a4ee018128d647e9f2ef0d644747672238e49a8da3d0cd26dfe597458
    需要获取hash的文件为: E:/ShellFolder - 副本.java
    MD2 == 3a755a99c5e407005cd45ebd856b4649
    MD5 == 5d08d440fa911d1e418c69a90b83cd86
    SHA1 == 522c8c4f4ff1dd669e251c2ab854c3033a51ca63
    SHA-256 == d1feb0c73c10a759e88bd240cb9d56d0598b4ff83a0704c6679f7ba12f6c4d99
    SHA-384 == 8f8c9da4cd7241c58af3c52b49199033f2dcf3d67f421753999f87511618d9ea2d738e8c16b9b68a7572d06108ff10f6
    SHA-512 == 4711579daee3ddacbaea189310348956cb43bcaaf0099f3be047b06f16c1a20a6b71ee3a4ee018128d647e9f2ef0d644747672238e49a8da3d0cd26dfe597458
    需要获取hash的文件为: E:/ShellFolder.txt
    MD2 == 3a755a99c5e407005cd45ebd856b4649
    MD5 == 5d08d440fa911d1e418c69a90b83cd86
    SHA1 == 522c8c4f4ff1dd669e251c2ab854c3033a51ca63
    SHA-256 == d1feb0c73c10a759e88bd240cb9d56d0598b4ff83a0704c6679f7ba12f6c4d99
    SHA-384 == 8f8c9da4cd7241c58af3c52b49199033f2dcf3d67f421753999f87511618d9ea2d738e8c16b9b68a7572d06108ff10f6
    SHA-512 == 4711579daee3ddacbaea189310348956cb43bcaaf0099f3be047b06f16c1a20a6b71ee3a4ee018128d647e9f2ef0d644747672238e49a8da3d0cd26dfe597458
    需要获取hash的文件为: D:/hapfish/ShellFolder.jpg
    MD2 == 3a755a99c5e407005cd45ebd856b4649
    MD5 == 5d08d440fa911d1e418c69a90b83cd86
    SHA1 == 522c8c4f4ff1dd669e251c2ab854c3033a51ca63
    SHA-256 == d1feb0c73c10a759e88bd240cb9d56d0598b4ff83a0704c6679f7ba12f6c4d99
    SHA-384 == 8f8c9da4cd7241c58af3c52b49199033f2dcf3d67f421753999f87511618d9ea2d738e8c16b9b68a7572d06108ff10f6
    SHA-512 == 4711579daee3ddacbaea189310348956cb43bcaaf0099f3be047b06f16c1a20a6b71ee3a4ee018128d647e9f2ef0d644747672238e49a8da3d0cd26dfe597458
    需要获取hash的文件为: E:/ShellFolder增加字符.txt
    MD2 == f2717c24c6c0e110457bd17221c9ca6c
    MD5 == c49e353a7c4c26bd7ccb5e90917c230f
    SHA1 == 477c8a9e465bfaa4be42d35c032a17f7e6b42b97
    SHA-256 == 9fa18adaf242ebcdc6563922d84c2a163c82e1a24db2eb2b73978ed1f354a8a3
    SHA-384 == 4eee8f8e6d64d21c15dc01fa049f4d12a3b8e1d94d87763fe0bea75ab5ea8432fa8251289ece45ee39fe3d36b3c3020c
    SHA-512 == e852ec0ff77250be497389d2f5a1818c18bb66106b9905c4ee26fe0d256eb3b77e0ce9a28a84e4b67e4332ba37ec3aa7518148e3a682318c0fc34c391f45c201
    需要获取hash的文件为: D:/hapfish/birosoft.jar
    MD2 == 38c5e1404718916dec59c33cafc909b3
    MD5 == dc3e2cc4fb3949cf3660e0f5f8c3fba3
    SHA1 == cde3dc25498afc5a563af0bb0eb54dc45f71bb28
    SHA-256 == adf6a961c70c6ea677dff066fc5d896fb0beb4dd442ca0eb619ae1d1b04291e5
    SHA-384 == fe7c6b754893c53ebd82bb53703fb5cc32115c9a38f98072f73def90729b271ee3c5c78e258bd9ff5ee5476193c2178b
    SHA-512 == a15376f327256a6e049dfbdc5c2ad3a98bffccc6fa92ee01ff53db6b04471ca0f45ca28f76ff4a6911b57825afa046671299141f2499d71f1dac618c92385491
    
    


    最后,把运行结果贴出来有点占空间,主要为了说明表述自己的猜想。一般来说同一哈希算法对同一文件(镜像、扩展名被修改)所产生的结果应该是一致的。 

    因此有个猜想,在baidu文库、腾讯的群共享上传时,先会判断是否有相同文件,从某种可能上来说也采用了对文件的哈希算法,毕竟从本地运算一个哈希算法后获得的数值要比把整个文件传过去比较实惠得多。而且字符串的比较也是很方便的。 

    对于某一种哈希算法,存在一种可能:就是两个不同的文件,计算出来的哈希值可能是一样的。当然为了保险,可以用两种甚至更多的哈希算法,只有在每种算法获得的哈希值都相同时,才能判断是同一个文件。 
    如果我们也对用户上传的文件进行哈希计算的话,就可以节省资源,同样的文件按理说可以减少上传次数……

    展开全文
  • 本文主要介绍了Java中常用加密/解密方法。具有很好的参考价值,下面跟着小编一起来看下吧
  • .net常用加密解密方法

    千次阅读 2015-10-23 09:54:53
    http://www.cnblogs.com/qinweilong/archive/2010/06/30/1768535.html .net常用加密解密方法 UnicodeEncoding 加密   代码   代码   代码   代码   代码
    http://www.cnblogs.com/qinweilong/archive/2010/06/30/1768535.html

    复制代码
         
    private byte [] _power; /// <summary> /// 用户权限 /// </summary> public byte [] Power { set { _power = value; } get { return _power; } } sql: Power binary 4000 解密: Encoding.Unicode.GetString(model.Power); 加密: byte [] Power = new UnicodeEncoding().GetBytes( this .HidPowers.Value); model.Power = Power;
    复制代码

     

    复制代码
         
    using System; using System.Security.Cryptography; using System.Text; namespace BeidouWY.Common.DEncrypt { /// <summary> /// Encrypt 的摘要说明。 /// LiTianPing /// </summary> public class DEncrypt { /// <summary> /// 构造方法 /// </summary> public DEncrypt() { } #region 使用 缺省密钥字符串 加密/解密string /// <summary> /// 使用缺省密钥字符串加密string /// </summary> /// <param name="original"> 明文 </param> /// <returns> 密文 </returns> public static string Encrypt( string original) { return Encrypt(original, " MATICSOFT " ); } /// <summary> /// 使用缺省密钥字符串解密string /// </summary> /// <param name="original"> 密文 </param> /// <returns> 明文 </returns> public static string Decrypt( string original) { return Decrypt(original, " MATICSOFT " ,System.Text.Encoding.Default); } #endregion #region 使用 给定密钥字符串 加密/解密string /// <summary> /// 使用给定密钥字符串加密string /// </summary> /// <param name="original"> 原始文字 </param> /// <param name="key"> 密钥 </param> /// <param name="encoding"> 字符编码方案 </param> /// <returns> 密文 </returns> public static string Encrypt( string original, string key) { byte [] buff = System.Text.Encoding.Default.GetBytes(original); byte [] kb = System.Text.Encoding.Default.GetBytes(key); return Convert.ToBase64String(Encrypt(buff,kb)); } /// <summary> /// 使用给定密钥字符串解密string /// </summary> /// <param name="original"> 密文 </param> /// <param name="key"> 密钥 </param> /// <returns> 明文 </returns> public static string Decrypt( string original, string key) { return Decrypt(original,key,System.Text.Encoding.Default); } /// <summary> /// 使用给定密钥字符串解密string,返回指定编码方式明文 /// </summary> /// <param name="encrypted"> 密文 </param> /// <param name="key"> 密钥 </param> /// <param name="encoding"> 字符编码方案 </param> /// <returns> 明文 </returns> public static string Decrypt( string encrypted, string key,Encoding encoding) { byte [] buff = Convert.FromBase64String(encrypted); byte [] kb = System.Text.Encoding.Default.GetBytes(key); return encoding.GetString(Decrypt(buff,kb)); } #endregion #region 使用 缺省密钥字符串 加密/解密/byte[] /// <summary> /// 使用缺省密钥字符串解密byte[] /// </summary> /// <param name="encrypted"> 密文 </param> /// <param name="key"> 密钥 </param> /// <returns> 明文 </returns> public static byte [] Decrypt( byte [] encrypted) { byte [] key = System.Text.Encoding.Default.GetBytes( " MATICSOFT " ); return Decrypt(encrypted,key); } /// <summary> /// 使用缺省密钥字符串加密 /// </summary> /// <param name="original"> 原始数据 </param> /// <param name="key"> 密钥 </param> /// <returns> 密文 </returns> public static byte [] Encrypt( byte [] original) { byte [] key = System.Text.Encoding.Default.GetBytes( " MATICSOFT " ); return Encrypt(original,key); } #endregion #region 使用 给定密钥 加密/解密/byte[] /// <summary> /// 生成MD5摘要 /// </summary> /// <param name="original"> 数据源 </param> /// <returns> 摘要 </returns> public static byte [] MakeMD5( byte [] original) { MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); byte [] keyhash = hashmd5.ComputeHash(original); hashmd5 = null ; return keyhash; } /// <summary> /// 使用给定密钥加密 /// </summary> /// <param name="original"> 明文 </param> /// <param name="key"> 密钥 </param> /// <returns> 密文 </returns> public static byte [] Encrypt( byte [] original, byte [] key) { TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider(); des.Key = MakeMD5(key); des.Mode = CipherMode.ECB; return des.CreateEncryptor().TransformFinalBlock(original, 0 , original.Length); } /// <summary> /// 使用给定密钥解密数据 /// </summary> /// <param name="encrypted"> 密文 </param> /// <param name="key"> 密钥 </param> /// <returns> 明文 </returns> public static byte [] Decrypt( byte [] encrypted, byte [] key) { TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider(); des.Key = MakeMD5(key); des.Mode = CipherMode.ECB; return des.CreateDecryptor().TransformFinalBlock(encrypted, 0 , encrypted.Length); } #endregion } }
    复制代码

     

    复制代码
         
    using System; using System.Security.Cryptography; using System.Text; namespace BeidouWY.Common.DEncrypt { /// <summary> /// DES加密/解密类。 /// LiTianPing /// </summary> public class DESEncrypt { public DESEncrypt() { } #region ========加密======== /// <summary> /// 加密 /// </summary> /// <param name="Text"></param> /// <returns></returns> public static string Encrypt( string Text) { return Encrypt(Text, " MATICSOFT " ); } /// <summary> /// 加密数据 /// </summary> /// <param name="Text"></param> /// <param name="sKey"></param> /// <returns></returns> public static string Encrypt( string Text, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte [] inputByteArray; inputByteArray = Encoding.Default.GetBytes(Text); des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, " md5 " ).Substring( 0 , 8 )); des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, " md5 " ).Substring( 0 , 8 )); System.IO.MemoryStream ms = new System.IO.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); } return ret.ToString(); } #endregion #region ========解密======== /// <summary> /// 解密 /// </summary> /// <param name="Text"></param> /// <returns></returns> public static string Decrypt( string Text) { return Decrypt(Text, " MATICSOFT " ); } /// <summary> /// 解密数据 /// </summary> /// <param name="Text"></param> /// <param name="sKey"></param> /// <returns></returns> public static string Decrypt( string Text, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); int len; len = Text.Length / 2 ; byte [] inputByteArray = new byte [len]; int x,i; for (x = 0 ;x < len;x ++ ) { i = Convert.ToInt32(Text.Substring(x * 2 , 2 ), 16 ); inputByteArray[x] = ( byte )i; } des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, " md5 " ).Substring( 0 , 8 )); des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, " md5 " ).Substring( 0 , 8 )); System.IO.MemoryStream ms = new System.IO.MemoryStream(); CryptoStream cs = new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write); cs.Write(inputByteArray, 0 ,inputByteArray.Length); cs.FlushFinalBlock(); return Encoding.Default.GetString(ms.ToArray()); } #endregion } }
    复制代码

     

    复制代码
         
    using System; using System.Text; using System.Security.Cryptography; namespace BeidouWY.Common.DEncrypt { /// <summary> /// 得到随机安全码(哈希加密)。 /// </summary> public class HashEncode { public HashEncode() { // // TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 得到随机哈希加密字符串 /// </summary> /// <returns></returns> public static string GetSecurity() { string Security = HashEncoding(GetRandomValue()); return Security; } /// <summary> /// 得到一个随机数值 /// </summary> /// <returns></returns> public static string GetRandomValue() { Random Seed = new Random(); string RandomVaule = Seed.Next( 1 , int .MaxValue).ToString(); return RandomVaule; } /// <summary> /// 哈希加密一个字符串 /// </summary> /// <param name="Security"></param> /// <returns></returns> public static string HashEncoding( string Security) { byte [] Value; UnicodeEncoding Code = new UnicodeEncoding(); byte [] Message = Code.GetBytes(Security); SHA512Managed Arithmetic = new SHA512Managed(); Value = Arithmetic.ComputeHash(Message); Security = "" ; foreach ( byte o in Value) { Security += ( int ) o + " O " ; } return Security; } } }
    复制代码

     

    复制代码
         
    using System; using System.Security; using System.Security.Cryptography; using System.Text; namespace BeidouWY.Common.DEncrypt { /// <summary> /// MD5Helper 的摘要说明。 /// </summary> public class MD5Helper { /// <summary> /// 得到一个加密的字符串 /// </summary> /// <param name="strIn"> 原始字符串 </param> /// <returns> 加密后字符串 </returns> public static string GetMD5String( string strIn) { byte [] b = Encoding.Default.GetBytes(strIn); b = new MD5CryptoServiceProvider().ComputeHash(b); string strOut = "" ; for ( int i = 0 ;i < b.Length;i ++ ) { strOut += b[i].ToString( " x " ).PadLeft( 2 , ' 2 ' ); } return strOut; } } }
    复制代码

     

    复制代码
         
    using System; using System.Text; using System.Security.Cryptography; namespace BeidouWY.Common.DEncrypt { /// <summary> /// RSA加密解密及RSA签名和验证 /// </summary> public class RSACryption { public RSACryption() { } #region RSA 加密解密 #region RSA 的密钥产生 /// <summary> /// RSA 的密钥产生 产生私钥 和公钥 /// </summary> /// <param name="xmlKeys"></param> /// <param name="xmlPublicKey"></param> public void RSAKey( out string xmlKeys, out string xmlPublicKey) { System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); xmlKeys = rsa.ToXmlString( true ); xmlPublicKey = rsa.ToXmlString( false ); } #endregion #region RSA的加密函数 // ############################################################################## // RSA 方式加密 // 说明KEY必须是XML的行式,返回的是字符串 // 在有一点需要说明!!该加密方式有 长度 限制的!! // ############################################################################## // RSA的加密函数 string public string RSAEncrypt( string xmlPublicKey, string m_strEncryptString ) { byte [] PlainTextBArray; byte [] CypherTextBArray; string Result; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(xmlPublicKey); PlainTextBArray = ( new UnicodeEncoding()).GetBytes(m_strEncryptString); CypherTextBArray = rsa.Encrypt(PlainTextBArray, false ); Result = Convert.ToBase64String(CypherTextBArray); return Result; } // RSA的加密函数 byte[] public string RSAEncrypt( string xmlPublicKey, byte [] EncryptString ) { byte [] CypherTextBArray; string Result; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(xmlPublicKey); CypherTextBArray = rsa.Encrypt(EncryptString, false ); Result = Convert.ToBase64String(CypherTextBArray); return Result; } #endregion #region RSA的解密函数 // RSA的解密函数 string public string RSADecrypt( string xmlPrivateKey, string m_strDecryptString ) { byte [] PlainTextBArray; byte [] DypherTextBArray; string Result; System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(xmlPrivateKey); PlainTextBArray = Convert.FromBase64String(m_strDecryptString); DypherTextBArray = rsa.Decrypt(PlainTextBArray, false ); Result = ( new UnicodeEncoding()).GetString(DypherTextBArray); return Result; } // RSA的解密函数 byte public string RSADecrypt( string xmlPrivateKey, byte [] DecryptString ) { byte [] DypherTextBArray; string Result; System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(xmlPrivateKey); DypherTextBArray = rsa.Decrypt(DecryptString, false ); Result = ( new UnicodeEncoding()).GetString(DypherTextBArray); return Result; } #endregion #endregion #region RSA数字签名 #region 获取Hash描述表 // 获取Hash描述表 public bool GetHash( string m_strSource, ref byte [] HashData) { // 从字符串中取得Hash描述 byte [] Buffer; System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create( " MD5 " ); Buffer = System.Text.Encoding.GetEncoding( " GB2312 " ).GetBytes(m_strSource); HashData = MD5.ComputeHash(Buffer); return true ; } // 获取Hash描述表 public bool GetHash( string m_strSource, ref string strHashData) { // 从字符串中取得Hash描述 byte [] Buffer; byte [] HashData; System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create( " MD5 " ); Buffer = System.Text.Encoding.GetEncoding( " GB2312 " ).GetBytes(m_strSource); HashData = MD5.ComputeHash(Buffer); strHashData = Convert.ToBase64String(HashData); return true ; } // 获取Hash描述表 public bool GetHash(System.IO.FileStream objFile, ref byte [] HashData) { // 从文件中取得Hash描述 System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create( " MD5 " ); HashData = MD5.ComputeHash(objFile); objFile.Close(); return true ; } // 获取Hash描述表 public bool GetHash(System.IO.FileStream objFile, ref string strHashData) { // 从文件中取得Hash描述 byte [] HashData; System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create( " MD5 " ); HashData = MD5.ComputeHash(objFile); objFile.Close(); strHashData = Convert.ToBase64String(HashData); return true ; } #endregion #region RSA签名 // RSA签名 public bool SignatureFormatter( string p_strKeyPrivate, byte [] HashbyteSignature, ref byte [] EncryptedSignatureData) { System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPrivate); System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA); // 设置签名的算法为MD5 RSAFormatter.SetHashAlgorithm( " MD5 " ); // 执行签名 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); return true ; } // RSA签名 public bool SignatureFormatter( string p_strKeyPrivate, byte [] HashbyteSignature, ref string m_strEncryptedSignatureData) { byte [] EncryptedSignatureData; System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPrivate); System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA); // 设置签名的算法为MD5 RSAFormatter.SetHashAlgorithm( " MD5 " ); // 执行签名 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData); return true ; } // RSA签名 public bool SignatureFormatter( string p_strKeyPrivate, string m_strHashbyteSignature, ref byte [] EncryptedSignatureData) { byte [] HashbyteSignature; HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature); System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPrivate); System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA); // 设置签名的算法为MD5 RSAFormatter.SetHashAlgorithm( " MD5 " ); // 执行签名 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); return true ; } // RSA签名 public bool SignatureFormatter( string p_strKeyPrivate, string m_strHashbyteSignature, ref string m_strEncryptedSignatureData) { byte [] HashbyteSignature; byte [] EncryptedSignatureData; HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature); System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPrivate); System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA); // 设置签名的算法为MD5 RSAFormatter.SetHashAlgorithm( " MD5 " ); // 执行签名 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData); return true ; } #endregion #region RSA 签名验证 public bool SignatureDeformatter( string p_strKeyPublic, byte [] HashbyteDeformatter, byte [] DeformatterData) { System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPublic); System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA); // 指定解密的时候HASH算法为MD5 RSADeformatter.SetHashAlgorithm( " MD5 " ); if (RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData)) { return true ; } else { return false ; } } public bool SignatureDeformatter( string p_strKeyPublic, string p_strHashbyteDeformatter, byte [] DeformatterData) { byte [] HashbyteDeformatter; HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter); System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPublic); System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA); // 指定解密的时候HASH算法为MD5 RSADeformatter.SetHashAlgorithm( " MD5 " ); if (RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData)) { return true ; } else { return false ; } } public bool SignatureDeformatter( string p_strKeyPublic, byte [] HashbyteDeformatter, string p_strDeformatterData) { byte [] DeformatterData; System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPublic); System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA); // 指定解密的时候HASH算法为MD5 RSADeformatter.SetHashAlgorithm( " MD5 " ); DeformatterData = Convert.FromBase64String(p_strDeformatterData); if (RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData)) { return true ; } else { return false ; } } public bool SignatureDeformatter( string p_strKeyPublic, string p_strHashbyteDeformatter, string p_strDeformatterData) { byte [] DeformatterData; byte [] HashbyteDeformatter; HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter); System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); RSA.FromXmlString(p_strKeyPublic); System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA); // 指定解密的时候HASH算法为MD5 RSADeformatter.SetHashAlgorithm( " MD5 " ); DeformatterData = Convert.FromBase64String(p_strDeformatterData); if (RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData)) { return true ; } else { return false ; } } #endregion #endregion } }
    复制代码

    展开全文
  • C# 常用加密解密方法

    千次阅读 2014-12-03 12:11:07
    /// RAS解密。 /// public static string RSADecrypt(string securitylString) { CspParameters param = new CspParameters(); param.KeyContainerName = "12345"; using (RSACryptoServiceProvider rsa = ...

    字符串加密分可逆和不可逆加密两种,下面直接贴上代码


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Security.Cryptography;
    using System.IO;
    
    namespace Operator.CommonOp
    {
        /// <summary>
        /// 字符串加密。
        /// </summary>
        public class StringSecurity
        {
            /// <summary>
            /// MD5加密。
            /// </summary>
            public static string MD5Encrypt(string originalString)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] palindata = Encoding.Default.GetBytes(originalString);
                byte[] encryptdata = md5.ComputeHash(palindata);
    
                return Convert.ToBase64String(encryptdata);
            }
    
            /// <summary>
            /// RAS加密。
            /// </summary>
            public static string RSAEncrypt(string originalString)
            {
                CspParameters param = new CspParameters();
                param.KeyContainerName = "12345";
    
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
                {
                    byte[] plaindata = Encoding.Default.GetBytes(originalString);
                    byte[] encryptdata = rsa.Encrypt(plaindata, false);
    
                    return Convert.ToBase64String(encryptdata);
                }
            }
    
            /// <summary>
            /// RAS解密。
            /// </summary>
            public static string RSADecrypt(string securitylString)
            {
                CspParameters param = new CspParameters();
                param.KeyContainerName = "12345";
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
                {
                    byte[] encryptdata = Convert.FromBase64String(securitylString);
                    byte[] decryptdata = rsa.Decrypt(encryptdata, false);
                    return Encoding.Default.GetString(decryptdata);
                }
            }
    
            /// <summary>
            /// DES加密。
            /// </summary>
            public static string DESEncrypt(string originalString)
            {
                string securtyString = null;
                string key = "12345678";
                string iv = "87654321";
                byte[] btKey = Encoding.UTF8.GetBytes(key);
                byte[] btIV = Encoding.UTF8.GetBytes(iv);
                byte[] inData = Encoding.UTF8.GetBytes(originalString);
    
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                MemoryStream ms = new MemoryStream();            
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write);
    
                cs.Write(inData, 0, inData.Length);
                cs.FlushFinalBlock();
    
                securtyString = Convert.ToBase64String(ms.ToArray());
                cs.Close();
                ms.Close();
    
                return securtyString;
            }
    
            /// <summary>
            /// DES解密。
            /// </summary>
            public static string DESDecrypt(string securityString)
            {
                byte[] inData = null;
                try
                {
                    inData = Convert.FromBase64String(securityString);
                }
                catch (Exception)
                {
                    return null;
                } 
    
                string originalString = null;
                string key = "12345678";
                string iv = "87654321";
                byte[] btKey = Encoding.UTF8.GetBytes(key);
                byte[] btIV = Encoding.UTF8.GetBytes(iv);
    
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write);
    
                cs.Write(inData, 0, inData.Length);
                try
                {
                    cs.FlushFinalBlock();
                }
                catch (Exception)
                {
                    ms.Close();
                    return null;
                }
                
    
                originalString = Encoding.UTF8.GetString(ms.ToArray()); 
                cs.Close();
                ms.Close();
    
                return originalString;
            }        
        }
    }
    


    展开全文
  • 1.base64 Python内置的base64模块可以实现base64、base32、base16、base85、urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形式,2.x可以是字符串形式。 base64模块的base64编码、解码调用了binascii...
  • 主要给大家介绍了关于C#开发中经常用的加密解密方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • C#开发中常用加密解密方法解析

    千次阅读 2014-03-17 08:46:12
    因为最近的做的东西要用到一些关于加密的技术,所以就把一些常用的加密方法给给总结了一下。好了废话不多说,还是按照以往的惯例,我会通过一个个的实例,逐一的把常用算法给大家讲解一下。  一、MD5加密算法 ...
  • 几种常用加密手段的加密与解密

    千次阅读 2019-01-31 15:36:32
    网络中传输敏感信息的时候通常会对字符串做加密解密处理 转自: https://blog.csdn.net/qq_36571506/article/details/80933640 1.Base64位加密(可加密解密) 最简单的加密方式,没有密钥,这种方式只要让别人拿到你...
  • java常用的加密解密方法

    千次阅读 2017-05-12 16:02:55
    加密是指对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,通过这样的途径来达到保护数据不被...采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这
  • 签名可能用到MD5,SHA1,加解密可能用到3DES,AES,RSA等。加密数据传输一般以字符串形式,通常会用到BASE64,HEX转换工具。 一、JAVA方式 笔者搜集了上面提到的主要几种加解密方式及转换的实现,在此分享出来...
  • php常用的加密解密方法

    千次阅读 2019-05-27 15:40:38
    1-1、不可逆的加密函数为:md5()、crypt(); md5() 用来计算 MD5 哈...这是单向的加密函数,无法解密。欲比对字符串,将已加密的字符串的头二个字符放在 salt 的参数中,再比对加密后的字符串。语法为:string cr...
  • C#常用的加密解密方法

    万次阅读 2016-06-18 16:52:43
    开篇C#内置很多加密解密方法,有MD5,SHA1,base64等。这里会简单介绍下这几个方法以及用法,不过不会深入研究每种加密方法的原理,高手请绕行。 这几个加密解密会分为两类说,一类是只有加密,没有解密类型的MD5,...
  • 数据加密技术是网络中最基本的安全技术,主要是通过对网络中传输的...将密文还原为原始明文的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。 加密的基本功能包括: 防止
  • Crypto 整理了 IOS 中常用加解密方法。 Base64 的编码、解码方法实现过程较为精简,可以此思路实现 base16 base32 等编码解码方法。 对文件的加解密可在对 NSData 的加解密方法上稍做修改行到。
  • 几种常用加解密方法

    千次阅读 2016-08-25 10:42:47
    和安一起解决视频加密的需求,了解了一些相关的视频加解密方法,故把相关的知识贴在这里 1. 全部加密(Naive Algorithm) 也就是使用标准 加密方法(比如DES)加密整个视频流。将视频比特流同传统的文本数据同样...
  • 易语言encryption.fne支持库中文名为易语言常用加解密支持库,本易语言支持库实现了对数据加解密的支持。 加解密算法N多,但其实没什么用处。原因是虽然核心算法一样,但写的人不一样处理方法也不一样,所以根本不会...
  • 里面包含常用加解密方法AES,RSA,DES,MD5,3DES方法,大家可以去了解一下,欢迎可以评论。
  • 常用数据加密和解密方法

    万次阅读 2018-07-17 13:54:07
    ASP.NET(C#)常用数据加密和解密方法汇总  一、数据加密的概念 1、 基本概念 2、 基本功能 3、 加密形式  二、 数据加密的项目应用和学习 1、 媒体加密:DRM 2、 文件加密:文本加密、pdf、word 3、 ...
  • JAVA与js加密解密常用方法

    千次阅读 2019-05-14 11:11:12
    常采用的是AES的加密解密方法,再稍微掺杂点随机数 JS端 //需要引入 aes.js /** * 非规则的aes加密,自己了字符串 * @param s * @returns */ function aesEncode(s) { var key = CryptoJS.enc.Latin1.parse('...
  • C# 常用加密解密

    2011-12-23 08:58:26
    常用加密解密方法:DES,RSA,TripleDES
  • Java中常用加解密技术加密代码提供方加密分类1、双向加密1.1、对称加密1.2、非对称加密2、单向加密3、数字签名证书 注意:建议阅读本文之前,先行阅读下面这篇文章,建立对密码学技术体系的整体认知: ...
  • 常用加解密算法总结1-DES、TDES、3DES

    万次阅读 2017-09-27 21:33:18
    概述常用算法类别包括对称密钥算法、非对称密钥算法以及摘要算法。 在了解具体类别算法之前,要先了解以下几个概念: 明文:原始信息 加密算法:以密钥为参数,对明文进行多种置换和转换的规则和步骤,变换结果为...
  • 常用函数 约束方法 加密解密 字符串 正则常用函数 约束方法 加密解密 字符串 正则常用函数 约束方法 加密解密 字符串 正则常用函数 约束方法 加密解密 字符串 正则常用函数 约束方法 加密解密 字符串 正则常用函数 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,497
精华内容 20,598
关键字:

常用的加解密方法