一聚教程网:一个值得你收藏的教程网站

热门教程

利用WSE 加密SOAP报文(5)

时间:2022-07-02 11:22:31 编辑:袖梨 来源:一聚教程网

解密收到的报文
不管是在客户端还是在服务器端,WSE总是在SecurityInputFilter实现报文解密的,由于对称加密需要由公共密钥派生出来的加密密钥,你需要创建一个SecurityInputFilter能够调用的方法来得到这个对称密钥,然后你就能使用包含在EncryptedData中的密钥和算法信息来帮你找到正确的共享密钥和加密算法了。这个方法必须实现在从Microsoft.Web.Services.Security.IDecryptionKeyProvider派生出来的类中。在我的例子中,DecryptionKeyProvider.GetDecryptionKey方法返回了对称密钥,如下:

public DecryptionKey GetDecryptionKey(string encAlgorithmUri,
KeyInfo keyInfo)
{

//重新创造同样的用于表示128位密钥的16个字节
byte[] keyBytes = {48, 218, 89, 25, 222, 209, 227, 51, 50, 168, 146,
188, 250, 166, 5, 206};


//重新创造表示初始化向量的8个字节(64位)
byte[] ivBytes = {16, 143, 111, 77, 233, 137, 12, 72};

SymmetricAlgorithm mySymAlg = new TripleDESCryptoServiceProvider();
mySymAlg.Key = keyBytes;
mySymAlg.IV = ivBytes;

//重新创建对称加密密钥
DecryptionKey myKey = new SymmetricDecryptionKey(mySymAlg);

return myKey;
}
即便在我的方法中并没使用他们,WSE还是要把KeyInfo元素和加密算法的URI传递给这个方法的,决定使用哪一个共享密钥或者加密算法来产生对称密钥

为了让SecurityInputFilter能够访问到GetDecryptionKey方法,下面的配置信息必须加入到应用程序的配置文件中(也就是 app.config 文件)


...


type="MyClient Assembly.DecryptionKeyProvider,

热门栏目