首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解密使用引发的数据异常

无法解密使用引发的数据异常
EN

Stack Overflow用户
提问于 2014-06-13 23:38:38
回答 1查看 776关注 0票数 0

使用,我试图对一个服务帐户进行身份验证,该帐户镜像示例代码http://samples.google-api-java-client.googlecode.com/hg/storage-serviceaccount-cmdline-sample/src/main/java/com/google/api/services/samples/storage/serviceaccount/cmdline/StorageServiceAccountSample.java中概述的过程,以便使用Blogger。我已经创建了服务帐户,并下载了API仪表板提供的.p12文件。这个.p12文件作为一个资源存储在jar文件中,其中包含用于连接到Blogger服务的代码。在GoogleCredentials.Builder对象上运行GoogleCredentials.Builder时,我会遇到一个带有消息的IOException,该消息简单地表示“it”不能显示数据。下面是所讨论的代码片段(删除了文件名)和堆栈跟踪块,我认为这是相关的。关于这一例外的原因,我有点不知所措。使用openssl,我能够隔离地验证p12文件。

代码

代码语言:javascript
复制
httpTransport = GoogleNetHttpTransport.newTrustedTransport();

File p12File = File.createTempFile("filename", ".p12");
FileOutputStream p12FileOutputStream = new FileOutputStream(p12File);
IOUtils.copy(getClass().getResourceAsStream("/ACCESS-KEYS/filename.p12"), p12FileOutputStream);

p12FileOutputStream.close();

credential = new GoogleCredential.Builder().setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
            .setServiceAccountScopes(Collections.singleton(BloggerScopes.BLOGGER))
            .setServiceAccountPrivateKeyFromP12File(p12File)
            .build();

堆栈跟踪

代码语言:javascript
复制
java.io.IOException: Could not decrypt data.
at com.rsa.cryptoj.o.gx.b(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1183)
at com.google.api.client.util.SecurityUtils.loadKeyStore(SecurityUtils.java:77)
at com.google.api.client.util.SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.java:110)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.setServiceAccountPrivateKeyFromP12File(GoogleCredential.java:503)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 22:59:11

根据上面user1516873提供的响应在这里发布最后的代码。注意,这个问题与原始问题之间的相关差异是第3行,其中"SunJSSE“是显式设置的。

代码语言:javascript
复制
httpTransport = GoogleNetHttpTransport.newTrustedTransport();

KeyStore keyStore = KeyStore.getInstance("PKCS12", "SunJSSE");
keyStore.load(getClass().getResourceAsStream("/ACCESS-KEYS/filename.p12"), "notasecret".toCharArray());
        PrivateKey key = (PrivateKey) keyStore.getKey("privatekey", "notasecret".toCharArray());

credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)      
                .setServiceAccountScopes(Collections.singleton(BloggerScopes.BLOGGER))
                .setServiceAccountPrivateKey(key)
                .build();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24215145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档