因OA系统需要对exchange的邮箱服务器做单点登录,开发商(微软中国代理商)提供了一套.Net开发的单点登录方案。平时公司为了节省成本,这种单点登录的工作一般都是我们自己开发完成,而我这边OA系统(另一家开发商提供的)是Java开发的,虽然加密这类的标准是一样的,可是没有参考代码,只能盲敲调试,且OA系统还得在jsp中写Java代码,实在是有点折磨(全程nodepad++写代码,编译错误只能在上传到服务器运行时才能发现)。
以下是开发商提供的.Net加密代码:
using System;
using System.Security.Cryptography;
namespace SignWithRSASHA256
{
public partial class TestForm : Form
{
public TestForm()
{
InitializeComponent();
}
private void signTest(object sender, EventArgs e)
{
// 123是私钥文件的密码
X509Certificate2 cert = new X509Certificate2(@"cert\\ifcloud.pfx", "123");
byte[] srcDataBuf = System.Text.Encoding.UTF8.GetBytes("待加密的字符串");
RSACryptoServiceProvider RSA = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] signedDataBuf = RSA.SignData(srcDataBuf, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
// base64SrcData
Console.WriteLine(HttpUtility.UrlEncode(Convert.ToBase64String(srcDataBuf)));
// signedData
Console.WriteLine(HttpUtility.UrlEncode(Convert.ToBase64String(signedDataBuf)));
}
}
}
我要做的事情就是用Java给它实现一下。
看着这段代码不多,感觉用Java写应该也不难。但主要是对加密这块了解得太少,而且也怕1.6的jdk会有不支持的情况。
抱着学习的心态,我先去微软官方的文档查了下这段代码里面涉及到的几个类和它们的方法。
X509Certificate2 类 (System.Security.Cryptography.X509Certificates) | Microsoft Docs
X509Certificate2.PrivateKey 属性 (System.Security.Cryptography.X509Certificates) | Microsoft Docs