当前位置: 代码迷 >> Web Service >> WCF uwernametoken 验证x509Certificate 加密解决方案
  详细解决方案

WCF uwernametoken 验证x509Certificate 加密解决方案

热度:190   发布时间:2016-05-02 02:19:28.0
WCF uwernametoken 验证x509Certificate 加密
我需要实现一个.net客户端 调用java wss4j 实现的webservice. 需要usernametoken验证,以及加密。
不用验证以及加密的webservcie调用我已经实现了,现在无法实现usernametoken以及加密。
我用的是WCF框架,直接添加服务。

另外我也查过资料,WSE3.0可以实现,请问有这方面经验的朋友吗?
万分感激!
------解决方案--------------------
加密可以使用BASE64编码的形式。你要确认是上传还是下载。
给你一个AES加密的例子。无论是JAVA还是NET,都是一样的。



    ''' <summary>
    ''' AES加密.   *****  
    ''' </summary>
    ''' <param name="data">待加密的字符数据</param>
    ''' <param name="key">密匙</param>
    ''' <returns>加密后的字符</returns>
    Public Shared Function AES_En(data As String,
                                  Key As String) As String

        Dim result As String = Nothing
        Dim aes As Aes = aes.Create()
        Dim tmp() As Byte = Nothing
        Dim keyByte() As Byte = getKey(Key, 32) '128位(byte[16]),192位(byte[24]),256位(byte[32])
        Dim ivByte() As Byte = getKey(Key & "J9$S1Cz", 16) 'iv向量,长度128位(byte[16])
        Dim encryptor As ICryptoTransform = aes.CreateEncryptor(keyByte, ivByte)

        Using ms As MemoryStream = New MemoryStream()
            Using cs As CryptoStream = New CryptoStream(ms, encryptor, CryptoStreamMode.Write)
                Dim writer As StreamWriter = New StreamWriter(cs)
                writer.Write(data)
                writer.Flush()
                writer.Close()
            End Using
            tmp = ms.ToArray()
        End Using
        result = Convert.ToBase64String(tmp)

        Erase tmp
        tmp = Nothing
        Erase keyByte
        keyByte = Nothing
        Erase ivByte
        ivByte = Nothing
        encryptor.Dispose()

        Return result

    End Function


    ''' <summary>
    ''' AES加密.   *****  
    ''' </summary>
    ''' <param name="indata">待加密的 Byte() 数据</param>
    ''' <param name="key">密匙</param>
    ''' <returns>加密后的 Byte()</returns>
    Public Shared Function AES_En(inData() As Byte,
                                  Key As String) As Byte()

        Dim result() As Byte = Nothing

        Dim keyByte() As Byte = getKey(Key, 32)             '128位(byte[16]),192位(byte[24]),256位(byte[32])
        Dim ivByte() As Byte = getKey(Key & "J9$S1Cz", 16)  'iv向量,长度必须为128位(byte[16])
        Dim aes As AesCryptoServiceProvider = New AesCryptoServiceProvider()
        Dim transform As ICryptoTransform

        Try
            aes.Key = keyByte
            aes.Mode = CipherMode.ECB
            aes.Padding = PaddingMode.ANSIX923
            transform = aes.CreateEncryptor()
  相关解决方案