我需要实现一个.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()