小编joa*_*gcd的帖子

在Java中加密Web Push API的消息

我正在尝试创建一个能够使用Push API发送推送消息的服务器:https://developer.mozilla.org/en-US/docs/Web/API/Push_API

我有客户端工作,但现在我希望能够从Java服务器发送带有负载的消息.

我看到了nodejs web-push示例(https://www.npmjs.com/package/web-push),但我无法将其正确地转换为Java.

我尝试按照示例使用此处的DH密钥交换:http://docs.oracle.com/javase/7/docs/technotes/guides/security/crypto/CryptoSpec.html#DH2Ex

在sheltond的帮助下,我能够找出一些应该工作的代码,但事实并非如此.

当我将加密的消息发布到Push服务时,我得到了预期的201状态代码,但推送从未到达Firefox.如果我删除了有效负载和标头,只是将POST请求发送到同一个URL,则消息成功到达Firefox,没有数据.我怀疑它可能与我用Cipher.getInstance("AES/GCM/NoPadding")加密数据的方式有关;

这是我目前使用的代码:

try {
    final byte[] alicePubKeyEnc = Util.fromBase64("BASE_64_PUBLIC_KEY_FROM_PUSH_SUBSCRIPTION");
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
    ECGenParameterSpec kpgparams = new ECGenParameterSpec("secp256r1");
    kpg.initialize(kpgparams);

    ECParameterSpec params = ((ECPublicKey) kpg.generateKeyPair().getPublic()).getParams();
    final ECPublicKey alicePubKey = fromUncompressedPoint(alicePubKeyEnc, params);
    KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance("EC");
    bobKpairGen.initialize(params);

    KeyPair bobKpair = bobKpairGen.generateKeyPair();
    KeyAgreement bobKeyAgree = KeyAgreement.getInstance("ECDH");
    bobKeyAgree.init(bobKpair.getPrivate());


    byte[] bobPubKeyEnc = toUncompressedPoint((ECPublicKey) bobKpair.getPublic());


    bobKeyAgree.doPhase(alicePubKey, true);
    Cipher bobCipher = Cipher.getInstance("AES/GCM/NoPadding");
    SecretKey bobDesKey = bobKeyAgree.generateSecret("AES");
    byte[] saltBytes = new byte[16];
    new …
Run Code Online (Sandbox Code Playgroud)

java encryption diffie-hellman push-api

17
推荐指数
1
解决办法
7355
查看次数

Cast应用程序中的"GoogleApiClient尚未连接"异常

我正在开发一个将内容投射到Chromecast的Android应用程序.有时在我com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacksonConnected方法实现中,我得到了一个

java.lang.IllegalStateException: GoogleApiClient is not connected yet.
Run Code Online (Sandbox Code Playgroud)

例外.

这是堆栈跟踪:

    FATAL EXCEPTION: main
 Process: com.joaomgcd.autocast, PID: 13771
 java.lang.IllegalStateException: GoogleApiClient is not connected yet.
    at com.google.android.gms.internal.eg.a(Unknown Source)
    at com.google.android.gms.common.api.GoogleApiClient.b(Unknown Source)
    at com.google.android.gms.cast.Cast$CastApi$a.launchApplication(Unknown Source)
    at com.joaomgcd.autocast.media.MediaConnectionCallbacks.onConnected(MediaConnectionCallbacks.java:37)
    at com.google.android.gms.internal.dx.b(Unknown Source)
    at com.google.android.gms.common.api.GoogleApiClient.bn(Unknown Source)
    at com.google.android.gms.common.api.GoogleApiClient.f(Unknown Source)
    at com.google.android.gms.common.api.GoogleApiClient$2.onConnected(Unknown Source)
    at com.google.android.gms.internal.dx.b(Unknown Source)
    at com.google.android.gms.internal.dx.bT(Unknown Source)
    at com.google.android.gms.internal.dw$h.b(Unknown Source)
    at com.google.android.gms.internal.dw$h.b(Unknown Source)
    at com.google.android.gms.internal.dw$b.bR(Unknown Source)
    at com.google.android.gms.internal.dw$a.handleMessage(Unknown Source)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5017)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) …
Run Code Online (Sandbox Code Playgroud)

android google-cast chromecast

12
推荐指数
3
解决办法
3万
查看次数

从我的Android应用中打开Chromecast YouTube视频

我可以使用我自己的白名单网址来播放我的chromecast视频,但是我可以直接从我的应用中直播YouTube视频吗?

我假设我需要的是远程启动YouTube应用并以某种方式提供视频ID,但我无法知道如何做到这一点.

有没有人通过Android应用程序完成此操作?

谢谢.

android google-cast chromecast

7
推荐指数
2
解决办法
5131
查看次数

使用StatusBarManagerService时出错 - 在android.permission.STATUS_BAR_SERVICE上使用java.lang.SecurityException

我想使用StatusBarManagerService,但它在SDK上不可用,所以我尝试"作弊",使用反射来访问它.

我能够访问它,但现在它在访问其中一个方法时给出了一个错误:

java.lang.SecurityException: StatusBarManagerService: Neither user 10139 nor current process has android.permission.STATUS_BAR_SERVICE.
Run Code Online (Sandbox Code Playgroud)

是否有可能获得此许可,或者根本不可能?

这是我的代码:

    try {
        Class serviceManagerClass = Class.forName("android.os.ServiceManager");
        Method getService = serviceManagerClass.getMethod("getService", String.class);
        IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar");
        Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor());
        Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder });
        Method clearAll = statusBarClass.getMethod("onClearAllNotifications");
        clearAll.setAccessible(true);
        clearAll.invoke(statusBarObject);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO …
Run Code Online (Sandbox Code Playgroud)

java reflection permissions android

4
推荐指数
1
解决办法
3696
查看次数

Google Play Services 9.2.0选择性编译感知API

我正在尝试在应用程序中使用新的Awareness API,但我可以将其包含在我的代码中的唯一方法是使用

compile 'com.google.android.gms:play-services:9.2.0'
Run Code Online (Sandbox Code Playgroud)

在我的gradle文件中.

我试过用

compile 'com.google.android.gms:play-services-awareness:9.2.0'
Run Code Online (Sandbox Code Playgroud)

但似乎并不存在.

有谁知道选择性编译感知API的正确编译路径是什么?

提前致谢.

android google-play-services google-awareness

3
推荐指数
1
解决办法
474
查看次数