Как добавить сквозное шифрование в приложение Firebase для Android с помощью Virgil Security SDK - PullRequest
0 голосов
/ 15 марта 2019

Пожалуйста, помогите мне!Я пытался включить некоторый код в мое приложение для чата Android после просмотра документации Virgil Security E3Kit , но безрезультатно.На самом деле, я не знаю, куда поместить эти примеры фрагментов кода.

  1. Мое приложение выполняет настройку / вход в систему, когда пользователь проходит проверку подлинности, прежде чем он может общаться в чате.Аутентификация в Firebase выглядит следующим образом:

    public void registerUser(final String email, final String password){
        if(email.equals("") || password.equals("")){
            Toast.makeText(getBaseContext(), "Please enter email and/or password",
                    Toast.LENGTH_LONG).show();
        }else{
            //auth is already initialized somewhere
            auth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
    
                        FirebaseUser user = auth.getCurrentUser();
                        Intent intent = new Intent(SetupActivity.this,
                                MoreActivity.class);
                        intent.putExtra("email", email);
                        intent.putExtra("userID", user.getUid());
                        startActivity(intent);
                    }else{
                        Toast.makeText(SetupActivity.this, "Error logging in, try again", Toast.LENGTH_LONG).show();
                    }
                }
            });
        }
    }
    

    Моя проблема в том, что я не знаю, где / как добавить часть, которая касается регистрации пользователей из документов Virgil, к вышеуказанному методу.

  2. После аутентификации пользователя они могут легко общаться со своими контактами.Опять же, здесь есть проблема, поскольку я понятия не имею, где следует размещать инициализацию и шифрование чатов - в методах onCreate, onStart etc или где-то еще.

    Это метод onCreate из ChatActivity, который вставляет чаты, введенные пользователями, в базу данных Firebase:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        Toolbar toolbar = (Toolbar) findViewById(R.id.chatToolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp));
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //What to do on back clicked
                onSupportNavigateUp();
            }
        });

        //Get receiver name from Intent extras
        Intent intent = getIntent();
        receiverName = intent.getStringExtra("receiverName");
        toolbar.setTitle(receiverName);

        database = FirebaseDatabase.getInstance();
        reference = database.getReference("chats");

        toolbar.setSubtitle(receiverPhone);

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(true);

        //Firebase instance and user details
        auth = FirebaseAuth.getInstance();
        user = auth.getCurrentUser();
        phone = user.getPhoneNumber();

        userName = user.getDisplayName();
        userId = user.getUid();
        userPhotoUrl = user.getPhotoUrl();

        //Get widgets
        newChat = (EditText) findViewById(R.id.chatMessage);
        receiverMsg = (TextView) findViewById(R.id.receiverMessage);
        myMsg = (TextView) findViewById(R.id.myMessage);

        dateAdded = (TextView) findViewById(R.id.dateAdded);
        receivedDate = (TextView) findViewById(R.id.receivedDate);

        myPicText = (ImageView) findViewById(R.id.myPicture);
        receiverPicText = (ImageView) findViewById(R.id.receiverPicture);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String message = newChat.getText().toString();
                Chat chat = new Chat(userId, message, receiverID, "");
                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mma");
                String date = dateFormat.format(Calendar.getInstance(
                        TimeZone.getDefault()).getTime());

                chat.setTime(date);
                DatabaseReference ref = reference.push();

                ref.setValue(chat);
                newChat.getText().clear();
            }
        });
    }

Моя проблема заключается в части шифрования как Firebaseпроверки подлинности и реализации чатов уже работают отлично.Спасибо за вашу помощь.

1 Ответ

1 голос
/ 10 мая 2019

Nayi.

Инициализация e3kit и регистрация пользователя должны происходить сразу после аутентификации с помощью firebase. Регистрация пользователя происходит только один раз, желательно при регистрации и инициализации при каждом входе. В вашем коде это должно произойти до startActivity(intent);.

Шифрование e3kit должно произойти до того, как вы создадите объект чата, поэтому перед Chat chat = new Chat(userId, message, receiverID, ""); убедитесь, что вы делаете message = eThree.encrypt(message, publicKeys);. Разумеется, расшифровка произойдет после того, как вы получите зашифрованное сообщение.

Если вам нужно больше деталей, вы можете взглянуть на этот образец: https://github.com/VirgilSecurity/virgil-e3kit-kotlin/blob/master/samples/android-java-firebase-function/app/src/main/java/com/android/virgilsecurity/ethreesamplejavafirebase/EThreeActivity.java

Также еще одним хорошим местом для получения поддержки является слабое сообщество Virgil Security: https://virgilsecurity.com/join-community

...