Como posso acessar as bibliotecas subjacentes que o .NET usa para a assinatura e criptografia do ViewState
-
27-09-2019 - |
Pergunta
Preciso encaixar o estado através do cliente, mas apenas para solicitações de get específicas (também conhecidas como links). Como tal, não quero adicionar esse estado ao ViewState do cliente, desordenando -o. O estado precisa ser criptografado. Como posso criar um novo dicionário do tipo viewstate e criptografá-lo com a chave e as configurações do MachineKey no Machine.config? Se o componente do dicionário não estiver exposto, como posso incritar/descriptografar strings usando a chave do Machine.config. Não quero adicionar mais configuração que deve ser replicada em nosso farm de servidores para duplicar a funcionalidade existente.
Solução
A configuração da chave da máquina é acessível através do System.Web.configuration.machinekeysection, que não possui métodos públicos além de um construtor e redefinição.
A descriptografia de strings é tratada pelo seguinte método:
.method assembly hidebysig static string
DecryptStringWithIV(string s,
valuetype System.Web.Configuration.IVType ivType) cil managed
Que chama
.method assembly hidebysig static uint8[]
EncryptOrDecryptData(bool fEncrypt,
uint8[] buf,
uint8[] modifier,
int32 start,
int32 length,
bool useValidationSymAlgo,
bool useLegacyMode,
valuetype System.Web.Configuration.IVType ivType) cil managed
Estes são ambos privados; A funcionalidade de criptografia/descriptografia não está exposta. Pode ser possível acessar a descriptografia por meio de implementações do System.web.ihttphandler, construindo um HTTPContext, embora eu não tenha certeza de onde se poderia chamar a funcionalidade de criptografia.