首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在XMPP android的聊天部分实现OMEMO加密

如何在XMPP android的聊天部分实现OMEMO加密
EN

Stack Overflow用户
提问于 2020-01-23 12:22:14
回答 1查看 560关注 0票数 0

你好!

我尝试了使用OMEMO进行加密,使用XMPP进行聊天,但是在进行实际加密时会出现设备列表问题。

遵循以下步骤,

  1. 两局服务登记
  2. 设备id生成
  3. 指纹生成
  4. 信任OMEMO身份
  5. 使用OMEMO管理器加密
  6. 使用XMPP连接对象发送消息。 请检查下面的代码,注意,我没有关于商店文件的想法,所以我创建了一个本地文件并给出了这里。我没有找到任何关于同样的文件。如果有人知道的话,请告诉我同样的情况。 尝试{ var messageToSend = tMessagetext!!.text.toString();var mFriendJID = "abc@localhost/yyy";val jidFriend = JidCreate.from(mFriendJID);val jidBare = JidCreate.bareFrom(mFriendJID);val msg = Message(jidFriend,Message.Type.chat);msg.setBody(messageToSend);SignalOmemoService.acknowledgeLicense();if (!File(Environment.getExternalStorageDirectory().absolutePath,()) SignalOmemoService.setup();val service = SignalOmemoService.getInstance() val file =SignalOmemoService.getInstance“myAppFile.txt”;OmemoConfiguration.setFileBasedOmemoStoreDefaultPath(file);val memomanager = OmemoManager.getInstanceFor(ChatService.xmppConnection) val device = memomanager.ownDevice Log.e(TAG,device.deviceId.toString()+","+device.jid);val fingerPrint =memomanager.getFingerprint(设备) Log.e(TAG,fingerPrint.toString());memomanager.trustOmemoIdentity(device,fingerPrint);val encryptedMessage =memomanager!.encrypt(jidBare,messageToSend)!!.text.clear();}catch (e :java.lang.Exception){ e.printStackTrace() }

我所犯的错误是,

代码语言:javascript
运行
复制
OmemoService: Could not fetch device list of abc@localhost: org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPP error reply received from abc@localhost: XMPPError: service-unavailable - cancel
    org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPP error reply received from abc@localhost: XMPPError: service-unavailable - cancel
        at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:268)
        at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:219)
        at org.jivesoftware.smackx.pubsub.LeafNode.getItems(LeafNode.java:196)
        at org.jivesoftware.smackx.pubsub.LeafNode.getItems(LeafNode.java:189)
        at org.jivesoftware.smackx.pubsub.LeafNode.getItems(LeafNode.java:136)
        at org.jivesoftware.smackx.pubsub.PubSubManager.getLeafNodeProsodyWorkaround(PubSubManager.java:350)
        at org.jivesoftware.smackx.pubsub.PubSubManager.getLeafNode(PubSubManager.java:333)
        at org.jivesoftware.smackx.omemo.OmemoService.fetchDeviceListNode(OmemoService.java:435)
        at org.jivesoftware.smackx.omemo.OmemoService.fetchDeviceList(OmemoService.java:452)
        at org.jivesoftware.smackx.omemo.OmemoService.refreshDeviceList(OmemoService.java:504)
        at org.jivesoftware.smackx.omemo.OmemoService.buildOrCreateOmemoSessionsFromBundles(OmemoService.java:605)
        at org.jivesoftware.smackx.omemo.OmemoService.processSendingMessage(OmemoService.java:810)
        at org.jivesoftware.smackx.omemo.OmemoService.processSendingMessage(OmemoService.java:787)
        at org.jivesoftware.smackx.omemo.OmemoManager.encrypt(OmemoManager.java:209)
        at com.abcd.androidChatapp.MainActivity.onSendMessage(MainActivity.kt:347)
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6312)
        at android.view.View$PerformClick.run(View.java:24943)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:192)
        at android.app.ActivityThread.main(ActivityThread.java:6754)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)

请让我知道这个代码中的问题,这样我就可以继续前进了。如果您有关于相同的适当文档,请告诉我,这样我就可以深入了解这个过程中到底发生了什么。

提前感谢你。

EN

回答 1

Stack Overflow用户

发布于 2020-03-19 14:48:01

这是我使用的代码。

代码语言:javascript
运行
复制
//Setup stream
SignalOmemoService.acknowledgeLicense();
SignalOmemoService.setup();

SignalOmemoService service = (SignalOmemoService) SignalOmemoService.getInstance();
service.setOmemoStoreBackend(new SignalCachingOmemoStore(new SignalFileBasedOmemoStore(mContext.getFilesDir())));

omemoManager = OmemoManager.getInstanceFor(getSafeConnection(), deviceId);
omemoManager.setTrustCallback(this);
omemoManager.addOmemoMessageListener(this);
omemoManager.addOmemoMucMessageListener(this);

//After login
omemoManager.purgeDeviceList();
omemoManager.initialize();

//send message
BareJid bareJid = JidCreate.bareFrom(jid);
OmemoMessage.Sent encMesage = omemoManager.encrypt(bareJid, msgText);
Message newMessage = encMesage.asMessage(bareJid);
xmppStream.sendMessage(newMessage);

此外,您还需要检查

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59878491

复制
相关文章

相似问题

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