在java中将字符串转换为java.Securtiy.Publickey

在java中将字符串转换为java.Securtiy.Publickey,java,security,ldap,public-key-encryption,openldap,Java,Security,Ldap,Public Key Encryption,Openldap,在LDAP服务器中,我以字符串格式存储公钥。我必须比较从LDAP服务器检索到的值和用户证书的公钥 我正在从LDAP检索字符串格式的“公钥”。通过以下方法,我将以公钥格式获得输出 PublicKey pub = certificate.getPublicKey(); 例如: public key which store and retrieved from ldap : 3082010a0282010100da7ce03ec4628dce29042f93787c6a70c0ee2c291

在LDAP服务器中,我以字符串格式存储公钥。我必须比较从LDAP服务器检索到的值和用户证书的公钥

我正在从LDAP检索字符串格式的“公钥”。通过以下方法,我将以公钥格式获得输出

   PublicKey pub = certificate.getPublicKey();
例如:

 public key which store and retrieved from ldap : 3082010a0282010100da7ce03ec4628dce29042f93787c6a70c0ee2c2911696519c2e2ca10526ae7c97c8b6f095c    755f8c5e9c6ab97937bc6b70cdda8791ecd4c23b53cc5a981ea4be54d849926812d54e1f0c1d8d209f1966a29d27    b3b38831fbbf4aa80cb942f419e82dbb7bdc43790edfe39093697b89f8c306825307a674e7ead0a9a204a7c4331b    bd91bb95450ad2b978e635754d93a463220951c0f686e745ab56f1546a97ae2d87f530bde91cd50c2227d8dc15dcfa83b5f8bfd9e0b220bd8c1aa79763eb9ba7fd7825068febc0eb5bcfaafb87f3cfd17e2cbbe2f34ca38afe41f4bbc2042fa60dcf523601c8e5814c9aa6b59a122f27bd8b41645d9e4d6354e6e73290a44b0203010001
通过
getPublicKey()
,我从证书中获取的值:

***
Sun RSA public key, 2048 bits
  modulus: 27581529112434455235399395495614661533524412849635912113821287924504314523203618221111108554792991994769511573234800381771189010092150662628156212797633901233021643754113925752858789999673304383861033906601469425706410753965248401239420679412397865844085987446528705248999902851200983500329050023325120622391550261964890287105642353902616488504197743500423303718260297874452584758316112606373795219655154047474828562736482689611898639008146126941813294363625955891232168718045290340674469984492628450581693408065679439269743483807803383534881136917173883224245178115070348015851631285800664873321494327268193971774539
  public exponent: 65537

  System.out.println("the encoded thing is...."+pub.getEncoded()) is: [B@2c683bfc

  BASE64Encoder encoder = new BASE64Encoder();
  String s = encoder.encode(pub.getEncoded());
   o/p is
      MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2nzgPsRijc4pBC+TeHxqcMDuLCkRaWUZ    wuLKEFJq58l8i28JXHVfjF6carl5N7xrcM3ah5Hs1MI7U8xamB6kvlTYSZJoEtVOHwwdjSCfGWai      nSezs4gx+79KqAy5QvQZ6C27e9xDeQ7f45CTaXuJ+MMGglMHpnTn6tCpogSnxDMbvZG7lUUK0rl4     5jV1TZOkYyIJUcD2hudFq1bxVGqXri2H9TC96RzVDCIn2NwV3PqDtfi/2eCyIL2MGqeXY+ubp/14JQaP68DrW8+q+4fzz9F+LLvi80yjiv5B9LvCBC+mDc9SNgHI5YFMmqa1mhIvJ72LQWRdnk1jVObnMpCkSwIDAQAB

有没有办法比较这两个值?字符串和公钥

如果从LDAP服务器获取的字符串是Base64encoded

将公钥对象编码为字符串


现在可以比较字符串了

我正在LDAP服务器中以“字符串”格式存储公钥

这是你的第一个错误。不要那样做。将其存储为字节数组。字符串不是二进制数据的容器


之后,只需比较字节数组,您可以通过arrays.equals()进行比较。

在ldap中,我们可以直接保存证书,而不是存储为整数值

  In ldif file:
    dc: xxxx
    objectClass: yyyyy
    userCertificate;binary:< file:///path/to/certificate.der

公钥是“已编码”的吗?PopoFibo可以看到上面的内容:)您是否也可以使用所获得的内容更新您的问题:
System.out.println(新字符串(pub.getEncoded())我做了。。哎呀,你已经用hashcode打印了字节数组字符串rep-object类名。注意我已经做了一个
新字符串(pub.getEncoded())然后我要做的就是告诉整个场景@gowthamIt将更有意义地将整个证书存储在LDAP中,而不仅仅是公钥。
  In ldif file:
    dc: xxxx
    objectClass: yyyyy
    userCertificate;binary:< file:///path/to/certificate.der
 java.security.cert.X509Certificate