zoukankan      html  css  js  c++  java
  • android和.net webservice中的DES加密算法

    也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的des加密算法有些不同,写下供以后使用.

    android端的DES.

    public class DES {
        private static byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
        //加密.
        public static String encryptDES(String encryptString, String encryptKey)
                throws Exception {
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    
            DESKeySpec desKeySpec = new DESKeySpec(encryptKey.getBytes("UTF-8"));
    
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            IvParameterSpec iv = new IvParameterSpec(encryptKey.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
            return toHexString(cipher.doFinal(encryptString.getBytes("UTF-8")));
    
        }
    
        //解密.
        public static String decryptDES(String decryptString, String decryptKey)
                throws Exception {
            byte[] bytesrc =convertHexString(decryptString);
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            DESKeySpec desKeySpec = new DESKeySpec(decryptKey.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            IvParameterSpec iv = new IvParameterSpec(decryptKey.getBytes("UTF-8"));
    
            cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
    
            byte[] retByte = cipher.doFinal(bytesrc);
            return new String(retByte);
        }
    
        public static String myKey(){  //这个可以不要,我是为了方便,获得加密解密的key
            return "12345678";
        }
    
        public static String toHexString(byte b[]) {
            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < b.length; i++) {
                String plainText = Integer.toHexString(0xff & b[i]);
                if (plainText.length() < 2)
                    plainText = "0" + plainText;
                hexString.append(plainText);
            }
    
            return hexString.toString();
        }
    
        public static byte[] convertHexString(String ss)
        {
            byte digest[] = new byte[ss.length() / 2];
            for(int i = 0; i < digest.length; i++)
            {
                String byteString = ss.substring(2 * i, 2 * i + 2);
                int byteValue = Integer.parseInt(byteString, 16);
                digest[i] = (byte)byteValue;
            }
    
            return digest;
        }
    }
    

      

    .net端的.

     Private sKey As String = "12345678"
        '====================说明=========================
        '开始于2017-6-15,用于测试android studio调用webservice的例子,用完可以删除....
        '=================================================
        <WebMethod()> _
        Public Function HelloWorld() As String
            Return "测试成功,用于返回一个有用的结果值!"
        End Function
    
        ''' <summary>
        ''' DES加密算法
        ''' </summary>
        ''' <param name="pToEncrypt"></param>
        ''' <param name="sKey"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
    
        Public Function Encrypt(ByVal pToEncrypt As String, ByVal sKey As String) As String
            Dim des As New DESCryptoServiceProvider()
            Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(pToEncrypt)
    
            des.Key = UTF8Encoding.UTF8.GetBytes(sKey)
            des.IV = UTF8Encoding.UTF8.GetBytes(sKey)
            Dim ms As New MemoryStream()
            Dim cs As New CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)
    
            cs.Write(inputByteArray, 0, inputByteArray.Length)
            cs.FlushFinalBlock()
    
            Dim ret As New StringBuilder()
            For Each b As Byte In ms.ToArray()
                ret.AppendFormat("{0:X2}", b)
            Next b
            ret.ToString()
            Return ret.ToString()
        End Function
    
        ''' <summary>
        ''' DES解密算法.
        ''' </summary>
        ''' <param name="pToDecrypt"></param>
        ''' <param name="sKey"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function Decrypt(ByVal pToDecrypt As String, ByVal sKey As String) As String
            Dim des As New DESCryptoServiceProvider()
    
            Dim inputByteArray((pToDecrypt.Length  2) - 1) As Byte
            For x As Integer = 0 To (pToDecrypt.Length  2) - 1
                Dim i As Integer = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16))
                inputByteArray(x) = CByte(i)
            Next x
    
            des.Key = UTF8Encoding.UTF8.GetBytes(sKey)
            des.IV = UTF8Encoding.UTF8.GetBytes(sKey)
            Dim ms As New MemoryStream()
            Dim cs As New CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)
            cs.Write(inputByteArray, 0, inputByteArray.Length)
            cs.FlushFinalBlock()
            Dim ret As New StringBuilder()
            Return Encoding.UTF8.GetString(ms.ToArray())
        End Function
    

      

    经过使用,发现没有任何问题,可以相互加解密.

  • 相关阅读:
    网络层协议
    交换机原理
    复习
    网络布线和数据转换
    计算机网络参考模型
    Linux常用命令2
    Linux常用命令1
    服务器分类、硬盘分类
    TCP三次握手和断开四次挥手
    向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾。
  • 原文地址:https://www.cnblogs.com/wjbych/p/7264350.html
Copyright © 2011-2022 走看看