Vai*_*Vai 3 python java cryptography python-3.x
我正在尝试编写用于在 Python 中加密和在 Java 中解密的代码,但出现错误。
我cryptography.fernet在 python 中使用来加密文件,当我Fernet Java用于解密时,它显示一个错误。
这是我的python代码:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
with open("key.txt", "wb") as f:
f.write(key)
with open("read_plain_text_from_here.txt", "r") as f:
encoded_text = f.read().encode()
cipher_text = cipher_suite.encrypt(encoded_text)
with open("write_cipher_text_here.txt", "wb") as f:
f.write(cipher_text)
with open("write_cipher_text_here.txt", "rb") as f:
cipher_text = f.read()
with open("key.txt", "rb") as f:
decryption_key = f.read()
with open("write_plain_text_here.txt", "wb") as f:
cipher_suite = Fernet(decryption_key)
f.write(cipher_suite.decrypt(cipher_text))
Run Code Online (Sandbox Code Playgroud)
这是我的Java代码:
package encryptapp;
import com.macasaet.fernet.*;
public class Decrypt
{
public static void main(String args[])
{
final Key key = new Key("***key i got from python**");
final Token token = Token.fromString("***cipher text i got from python***");
final Validator<String> validator = new StringValidator() {};
final String payload = token.validateAndDecrypt(key, validator);
System.out.println("Payload is " + payload);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的 Java 错误是:
Exception in thread "main" com.macasaet.fernet.TokenExpiredException: Token is expired
at com.macasaet.fernet.Token.validateAndDecrypt(Token.java:240)
at com.macasaet.fernet.Validator.validateAndDecrypt(Validator.java:104)
at com.macasaet.fernet.Token.validateAndDecrypt(Token.java:218)
at encryptapp.Decrypt.main(Decrypt.java:60)
Run Code Online (Sandbox Code Playgroud)
文档链接:
Python:https : //cryptography.io/en/latest/
Java:https : //github.com/l0s/fernet-java8/blob/master/README.md
在fernet-java8像Python类不类没有一个明确的说法TTL解密。相反,它的默认值为 60 秒。您需要覆盖接口的getTimeToLive()方法Validator以指定自定义 TTL。如果要将 TTL 设置为“永远”,这相当于ttl=Nonepython fernet 中的关键字参数,请执行以下操作:
import java.time.Duration;
import java.time.Instant;
.
.
.
@Override
final Validator < String > validator = new StringValidator() {
public TemporalAmount getTimeToLive() {
return Duration.ofSeconds(Instant.MAX.getEpochSecond());
}
};
Run Code Online (Sandbox Code Playgroud)