2012-02-02 148 views
0

下面是一些代碼,我有一個完美的作品:加密密鑰大小和算法

Sub EncryptFile(ByVal sInputFilename As String, _ 
       ByVal sOutputFilename As String, _ 
       ByVal sKey As String) 

    Dim fsInput As New FileStream(sInputFilename, _ 
           FileMode.Open, FileAccess.Read) 
    Dim fsEncrypted As New FileStream(sOutputFilename, _ 
           FileMode.Create, FileAccess.Write) 

    Dim DES As New DESCryptoServiceProvider() 

    'Set secret key for DES algorithm. 
    'A 64-bit key and an IV are required for this provider. 
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey) 

    'Set the initialization vector. 
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey) 

    'Create the DES encryptor from this instance. 
    Dim desencrypt As ICryptoTransform = DES.CreateEncryptor() 
    'Create the crypto stream that transforms the file stream by using DES encryption. 
    Dim cryptostream As New CryptoStream(fsEncrypted, _ 
             desencrypt, _ 
             CryptoStreamMode.Write) 

    'Read the file text to the byte array. 
    Dim bytearrayinput(fsInput.Length - 1) As Byte 
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length) 
    'Write out the DES encrypted file. 
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length) 
    cryptostream.Close() 

末次

是否有可能改變密鑰長度,甚至MD5和SHA1加密之間選擇使用此代碼?如果沒有,有人能指出我正確的方向來找到一些這樣做嗎?

感謝

西蒙

回答

1

DES是一種加密算法。如果你想使用別的東西,你應該看看TripleDESCryptoServiceProvider或者AesCryptoServiceProvider(在System.Security.Cryptography命名空間中)。

MD5和SHA1實際上是哈希算法。實際上,它們是特殊情況下的單向加密算法,不能解密(所以我不認爲它們就是你要找的)。

只看了TripleDes的和AES類的文檔,它看起來像你應該能夠取代線:任何提供了一個CreateEncryptor功能的其他CryptoServiceProvider類

Dim DES As New DESCryptoServiceProvider() 

。它們還支持您可以設置的KeySize屬性。你可以嘗試這樣的:

Sub EncryptFile(ByVal sInputFilename As String, _ 
      ByVal sOutputFilename As String, _ 
      ByVal sKey As String, _ 
      ByVal keysize as integer, _ 
      ByVal algorithm as String) 

    Dim fsInput As New FileStream(sInputFilename, _ 
          FileMode.Open, FileAccess.Read) 
    Dim fsEncrypted As New FileStream(sOutputFilename, _ 
          FileMode.Create, FileAccess.Write) 

    Dim algorithm As SymmetricAlgorithm 
    Select Case algorithm 
     Case "DES": algorithm = New DESCryptoServiceProvider() 
     Case "3DES": algorithm = New TripleDESCryptoServiceProvider() 
     Case "AES": algorithm = New AESCryptoServiceProvider() 
    End Select 
    algorithm.KeySize = keysize 

    'Set secret key for the algorithm. 
    'A 64-bit key and an IV are required for this provider. 
    algorithm.Key = ASCIIEncoding.ASCII.GetBytes(sKey) 

    'Set the initialization vector. 
    algorithm.IV = ASCIIEncoding.ASCII.GetBytes(sKey) 

    'Create the encryptor from this instance. 
    Dim desencrypt As ICryptoTransform = algorithm.CreateEncryptor() 
    'Create the crypto stream that transforms the file stream by using encryption. 
    Dim cryptostream As New CryptoStream(fsEncrypted, _ 
            desencrypt, _ 
            CryptoStreamMode.Write) 

    'Read the file text to the byte array. 
    Dim bytearrayinput(fsInput.Length - 1) As Byte 
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length) 
    'Write out the DES encrypted file. 
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length) 
    cryptostream.Close() 
End Sub 

我沒試過編譯上面的示例,但你讓你開始希望。