我正在使用SagePay Forms,目前正在将他们的VB示例转换为c#.我取得了很好的进展,所以我的项目的加密部分工作正常(SagePay可以解密).
我遇到的问题是,当我尝试解密字符串时,它会变成垃圾.如果有人这样做之前我真的很感激我的解密代码的一些帮助.我已经包含了有效的加密代码,前两行是来自另一种方法的设置和调用.
我没有添加VB代码,但如果需要,我可以添加它.如果不需要,不想要一个巨大的帖子.
实用方法:
public string byteArrayToHexString(byte[] ba)
{
return BitConverter.ToString(ba).Replace("-", "");
}
public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
主加密方法,前几行是从较大的方法中提取的调用.
string crypt = "blahblahblah"
string EncryptAndEncode = "@" + byteArrayToHexString(aesEncrypt(crypt));
private byte[] aesEncrypt(string inputText)
{
RijndaelManaged AES = new RijndaelManaged();
//set the mode, padding and block size for the key
AES.Padding = PaddingMode.PKCS7;
AES.Mode = CipherMode.CBC;
AES.KeySize = 128;
AES.BlockSize = 128; …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,设置使用Owin和Azure AD.它运行良好,但我现在需要在iframe内运行作为第三方解决方案的一部分.
除了安全性之外,这是可以的. https://login.microsoftonline.com不允许在iframe内运行.我的控制器将检查用户是否经过身份验证,如果没有,请调用'HttpContext.GetOwinContext().Authentication.Challenge(..............'
在研究中,我看起来不太可能在框架内做任何事情.我是唯一一个创建登录页面的选项,该页面会重定向到包含iframe的客户端应用程序吗?如果此过期,则iframe当前显示错误,指出内容无法在框架中显示,这不是很优雅.
我已更新 System.IdentityModel.Tokens.jwt,它警告我在较低的代码块中使用“Audience”已过时。我做了一些研究,发现让观众前进的正确方法是:
var validationParameters = new TokenValidationParameters()
{
ValidAudience = ConfigurationManager.AppSettings["ida:AudienceUri"]
};
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何将两者结合在一起?
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Audience = ConfigurationManager.AppSettings["ida:AudienceUri"],
//TokenValidationParameters.validAudience = ConfigurationManager.AppSettings["ida:AudienceUri"],
Tenant = ConfigurationManager.AppSettings["ida:Tenant"]
});
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
});
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = metadata
});
}
Run Code Online (Sandbox Code Playgroud)
}
var date = new Date();
var date2 = new Date();
daysinadvance = document.getElementById('AdvanceDays').value;
date2.setDate(date.getDate()+daysinadvance);
console.log(date2 + date + daysinadvance);
Fri Jan 28 2022 18:13:43 GMT+0000 (GMT Daylight Time)
Mon Apr 28 2014 18:13:43 GMT+0100 (GMT Standard Time)
60
Run Code Online (Sandbox Code Playgroud)
如果我传入一个直接输入的数字,所以+ 60,它工作正常,但使用变量,我在2022年得到一个日期.我想要的是date2为当前日期+ 60天所以我可以更新我的验证.
有什么帮助吗?