RSACryptoServiceProvider



  • RSACryptoServiceProvider
    di Gaetanin (utente non iscritto) data: 25/11/2016 13:00:40

    Buongiorno a tutti,
    ho un problema con l'utilizzo dell'oggetto RSACryptoServiceProvider della libreria mscorlib. Ho creato una piccola macro che cripta una stringa presa da una cella e stampa il risultato (Base64Encoded) in un'altra. Ho testato la mia macro in diversi ambienti criptando sempre la stessa stringa. Gli ambienti sono:
    - Windows 10 - Excel 2013
    - Windows 7 - Excel 2013
    - Windows 7 - Excel 2010
    Nel primo caso la stringa risultato terminava con "==", negli altri due casi terminava con "=". Ho controllato gli elementi dell'array di byte che ricevo in output dopo l'Encryption e ho notato che nel secondo e terzo caso (Win7 Excel 2013/2010) il primo elemento dell'array è 0 e lunghezza dell'array è 257. Utilizzando Windows 10, però, il primo elemento non è sempre 0, ma varia e la lunghezza dell'array è 256.
    Questo è il codice che utilizzo. Spero di trovare qualcuno che possa aiutarmi.
    Ringrazio in anticipo.
     
    Function Encrypt_RSA(str As String)
        Dim encryptedJson As String
        Dim dataToEncrypt() As Byte
    
        dataToEncrypt = StrConv(str, vbFromUnicode)
        
        Dim encryptedData() As Byte
        
        'Create a new instance of RSACryptoServiceProvider
        Dim rsa As New RSACryptoServiceProvider
        
        Dim RSAPublicKeyInfo
        Open ThisWorkbook.Path + "/Security/publicKeyXML.txt" For Input As #1
            Input #1, inutile
            Input #1, startRoot
            Input #1, Modulus
            Input #1, Exponent
            Input #1, endRoot
        Close #1
    
        RSAPublicKeyInfo = startRoot + Modulus + Exponent + endRoot
        Foglio1.Range("B12").Value = RSAPublicKeyInfo
        
        rsa.FromXmlString (RSAPublicKeyInfo)
        encryptedData = rsa.Encrypt(dataToEncrypt, True)
        
        encryptedJson = EncodeBase64(encryptedData)
    
        Encrypt_RSA = encryptedJson
    End Function
    
    Public Function EncodeBase64(ByRef arrData() As Byte) As String
        Dim objXML As MSXML2.DOMDocument
        Dim objNode As MSXML2.IXMLDOMElement
        
        ' help from MSXML
        Set objXML = New MSXML2.DOMDocument
        Set objNode = objXML.createElement("b64")
        
        objNode.DataType = "bin.base64"
        objNode.nodeTypedValue = arrData
        
        EncodeBase64 = objNode.Text
    End Function