Java到Win32加密API

用户名

我有以下从Java作为RSA生成的公钥:

305c300d06092a864886f70d0101010500034b003048024100ab12b3ee64b85bdda7e9744df3210d9b0efc7fbd36385cd903a4f8ee51101bc9c4f0b23583ff090e7d61773e024cbbff4008037cba6538d1c70d865c948716e70203010001

我正在尝试导入密钥,如下所示:

1)将字符串解码为字节数组(Key

public static byte[] DecodeKey(string data)
{
    int count = data.Length;
    byte[] key = new byte[count / 2];
    for (int i = 0; i < count ; i += 2)
        key[i / 2] = Convert.ToByte(data.Substring(i, 2), 16);
    return key;
}

2)CryptAcquireContext使用Microsoft Strong Cryptographic ProviderPROV_RSA_FULL
3)然后CryptImportKey使用上方的键和进行呼叫key.Length

它返回:

提供者的版本错误。

总统詹姆士·波尔克

RSA密钥采用以下SubjectPublicKeyInfo格式,即使用该RSAPublicKey.getEncoded()方法时Java返回格式JavaX509EncodeKeySpec出于历史原因将这种格式称为

这是.NET的不方便格式。您可以检查.NET类,以了解哪种格式最方便。我怀疑最方便的格式是XML格式。以下Java代码段将以这种格式输出RSA公钥:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPublicKey;
import javax.xml.bind.DatatypeConverter;

public class RSAToXML {

    public static void main(String[] args) throws Exception {
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
        kpg.initialize(1024);
        KeyPair keyPair = kpg.generateKeyPair();
        RSAPublicKey rsaPub = (RSAPublicKey) keyPair.getPublic();
        System.out.println("<RSAKeyValue>");
        System.out.print("\t<Modulus>");
        System.out.print(DatatypeConverter.printBase64Binary(rsaPub.getModulus().toByteArray()));
        System.out.println("</Modulus>");
        System.out.print("\t<Exponent>");
        System.out.print(DatatypeConverter.printBase64Binary(rsaPub.getPublicExponent().toByteArray()));
        System.out.println("</Exponent>");
        System.out.println("</RSAKeyValue>");
    }
}

然后,可以使用此输出将RSA公钥导入.NET,如以下C#代码片段所示:

    public static void XmlImport()
    {
        var xmlPubKey = "<RSAKeyValue>\n\t<Modulus>AI0hSZ3hcfJHv1TPSIkT0XeW/HMPPFJMw4/aX5NxfhyVacpb5u6rucDztVNG1pXaBdya9OdO1+mGG250y+QuqP/70uu5QMcMEpCdp8xl0i+cUN9+fHDzse4XR/Kdrl3pKAefSR5QQX8xBScjTO+H+9fXVrrU9TQU6WXmahQnDwDJ</Modulus>\n\t<Exponent>AQAB</Exponent>\n</RSAKeyValue>\n";
        var rsa = RSA.Create();
        rsa.FromXmlString(xmlPubKey);
        Console.WriteLine(rsa.ToXmlString(false));
    }

注意:这使用.NET类,而不是Win32 CryptoAPI。几乎没有理由再使用CryptoAPI。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Win32 API与Java套接字刷新(TCP)

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

Win32 API SearchPath失败

来自分类Dev

如何禁用按钮-Win32 API

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

Win32 API 无法 CreateWindowW()

来自分类Dev

在Win32程序中使用XAML Hosting API导航到页面会导致访问冲突

来自分类Dev

Win32的Cortana

来自分类Dev

Win32线程

来自分类Dev

win32 ExportAsFixedFormat

来自分类Dev

使用嵌入式JRE将Shaded Java(jar)构建到Win32可执行文件中?

来自分类Dev

Windows:如何拦截Win32磁盘I / O API

来自分类Dev

调用win32 API并回调类函数

来自分类Dev

在Python中使用WIN32 API CreateProcessAsUser

来自分类Dev

Win32 API独有的功能?

来自分类Dev

Win32 API C ++菜单栏

来自分类Dev

从FlasCC(又名Crossbridge)访问Win32 API

来自分类Dev

C ++ Win32 Api资源文件

来自分类Dev

使用C ++ Win32 API启用视觉样式吗?

来自分类Dev

Win32 API函数GetExplicitEntriesFromAcl()的对应项是什么?

来自分类Dev

使用Win32 API绘制笛卡尔系统

来自分类Dev

C Win32 API:设置复选框的状态

来自分类Dev

PRINTER_INFO_6无法使用WIn32 API

来自分类Dev

具有HWND_BROADCAST的Win32 API SendMessage

来自分类Dev

没有Win32 API的本地帮助内容

来自分类Dev

如何为Win32 API声明变量?

来自分类Dev

如何清除Win32 API中的屏幕

来自分类Dev

无法在Win32 API中读取HWND的内存

来自分类Dev

将变量传递给WIN32 API LPCWSTR?