无法在Android Studio中使用Fernet Java执行加密

无法在Android Studio中使用Fernet Java执行加密,java,android,encryption,cryptography,fernet,Java,Android,Encryption,Cryptography,Fernet,Fernet加密是我的客户要求 我有Fernet密钥,希望通过以下链接在Java(Android Studio)中实现加密。 从上个星期开始做这个,但直到现在还没有实现,任何人都可以帮我解决这个问题 没有引入任何方法来执行加密 final Key key = new Key("3t55GSk5qDRUif_v4MNQGLrkzaWv-TFOSJpqQWj9KKg="); final Token token = Token.generate(key, "This is

Fernet加密是我的客户要求

我有Fernet密钥,希望通过以下链接在Java(Android Studio)中实现加密。 从上个星期开始做这个,但直到现在还没有实现,任何人都可以帮我解决这个问题

没有引入任何方法来执行加密

final Key key = new Key("3t55GSk5qDRUif_v4MNQGLrkzaWv-TFOSJpqQWj9KKg=");
final Token token = Token.generate(key, "This is my message");
我在build.gradle中添加了依赖项,如Fernet文档中所述

implementation 'com.macasaet.fernet:fernet-java8:1.4.2'

下面的代码是使用Fernet Java 8进行字符串加密的一个简单示例,没有propper error handling,而且我没有检查使用了什么加密算法、模式或密钥长度

要加密更复杂的数据结构,请参阅

在第一加密/解密部分中,生成新密钥并生成新令牌。此令牌的(默认)持续时间为60秒,可以更改。解密立即完成,因此不会过期

第二次解密使用一个旧令牌(来自GitHub readme.md),当尝试解密时,您会收到一个“TokenExpiredException”

控制台:

key: j2v_wwTtEanOKF4-OqXtJ8ECi9UGOD72uGuJLJqZUuE=
token: gAAAAABfEJkmA7qy6voW6-xZMz4wYqcies156jEBXbqkk585aerDwKRlQAuFOkSv94Ac503WSk222ayQMvPmweDp9IRakq3mBMrBY7zyRt9ou5luqpTXs8HDWvCjpJ0y66-hboULhyut
token timestamp: 2020-07-16T18:15:02.456832100Z
decryptedtext: this is my data that needs encryption
token2 timestamp: 1985-10-26T08:20:00Z
Exception in thread "main" com.macasaet.fernet.TokenExpiredException: Token is expired
    at com.macasaet.fernet.Token.validateAndDecrypt(Token.java:250)
    at com.macasaet.fernet.Validator.validateAndDecrypt(Validator.java:104)
    at com.macasaet.fernet.Token.validateAndDecrypt(Token.java:228)
    at Unable_to_perform_Encryption_using_Fernet_Java.Main.main(Main.java:27)
代码:

import com.macasaet.fernet.Key;
导入com.macasaet.fernet.StringValidator;
导入com.macasaet.fernet.Token;
导入com.macasaet.fernet.Validator;
//在此处获取Fernet_Java:https://mvnrepository.com/artifact/com.macasaet.fernet/fernet-java8
//使用的版本:1.42
公共班机{
静态最终验证器验证器=新StringValidator(){
};
公共静态void main(字符串[]args){
System.out.println(“https://stackoverflow.com/questions/62939044/unable-to-perform-encryption-using-fernet-java-in-android-studio\n”);
//生成密钥
Key=Key.generateKey();
System.out.println(“key:+key.serialise());
//加密
String plaintext=“这是我需要加密的数据”;
Token Token=Token.generate(key,明文);
System.out.println(“token:+token.serialise());
//解密
System.out.println(“令牌时间戳:+token.getTimestamp());
String decryptedtext=token.validateAndeCrypt(密钥,验证器);
System.out.println(“decryptedtext:+decryptedtext”);
//旧令牌
Token token2=Token.fromString(“gaaaaaaadwj6waaecawqfbgcqolda0ody021cpgvwkz_eEwCGM4BLLF_5cv9; dopmrhuvupjobwoz7jcbmrr64jvmpu4iwqda=”;
System.out.println(“token2时间戳:+token2.getTimestamp());
String decryptedtext2=token2.ValidateAndeCrypt(密钥,验证器);
System.out.println(“decryptedtext2:+decryptedtext2”);
}
}

am遵循相同的标记,但该标记是数据的加密形式。是的,但该标记还包含一个时间戳,因此该标记仅在60秒内有效。考虑一下登录Web服务-令牌将保存在浏览器历史记录中,但当您稍后尝试登录时,登录将失败60秒。如果你觉得我的答案有帮助,请将其标记为已接受,谢谢。坚持这个。有没有办法解密数据(@Rohit-TP:问题是关于加密,而不是解密。如果你坚持这个问题,请提出你自己的问题,添加你正在努力解决的代码,并添加一个示例数据集(明文、密钥、密文),谢谢。
import com.macasaet.fernet.Key;
import com.macasaet.fernet.StringValidator;
import com.macasaet.fernet.Token;
import com.macasaet.fernet.Validator;
// get Fernet_Java here: https://mvnrepository.com/artifact/com.macasaet.fernet/fernet-java8
// version used: 1.42
public class Main {
    static final Validator<String> validator = new StringValidator() {
    };
    public static void main(String[] args) {
        System.out.println("https://stackoverflow.com/questions/62939044/unable-to-perform-encryption-using-fernet-java-in-android-studio\n");
        // generate a key
        Key key = Key.generateKey();
        System.out.println("key: " + key.serialise());
        // encrypt
        String plaintext = "this is my data that needs encryption";
        Token token = Token.generate(key, plaintext);
        System.out.println("token: " + token.serialise());
        // decrypt
        System.out.println("token timestamp: " + token.getTimestamp());
        String decryptedtext = token.validateAndDecrypt(key, validator);
        System.out.println("decryptedtext: " + decryptedtext);
        // old token
        Token token2 = Token.fromString("gAAAAAAdwJ6wAAECAwQFBgcICQoLDA0ODy021cpGVWKZ_eEwCGM4BLLF_5CV9dOPmrhuVUPgJobwOz7JcbmrR64jVmpU4IwqDA==");
        System.out.println("token2 timestamp: " + token2.getTimestamp());
        String decryptedtext2 = token2.validateAndDecrypt(key, validator);
        System.out.println("decryptedtext2: " + decryptedtext2);
    }
}