Ich habe zwei Anwendungen, die mit Sparsamkeit interagieren. Sie teilen den gleichen geheimen Schlüssel und ich muss ihre Nachrichten verschlüsseln. Es ist sinnvoll, den symmetrischen Algorithmus (z. B. AES) zu verwenden, aber ich habe keine Bibliothek gefunden, um dies zu tun. Also habe ich eine Nachforschungen angestellt und die folgenden Optionen angezeigt: < /p>
Verwenden Sie die integrierte SSL-Unterstützung < /h2>
Ich kann integrierte SSL-Unterstützung verwenden, eine sichere Verbindung herstellen und meinen geheimen Schlüssel genau wie Authentifizierungs-Token verwenden. Es ist zusätzlich zu dem geheimen Schlüssel, den sie bereits haben, Zertifikate zu installieren, aber ich muss nichts implementieren, außer zu überprüfen, ob der von dem Client empfangene geheime Taste lokal mit der geheimen Taste gespeichert ist. TSOCKET und überschreiben write () und read () Methoden und entschlüsseln Sie Daten. Wird den Verkehr auf kleinen Schreibvorgängen erhöhen. Wenn beispielsweise TBINYPROTOCOL 4-Byte-Ganzzahl schreibt, wird ein Block (16 Bytes) in verschlüsseltem Zustand erfolgt. CipheroutputStream verschlüsselt kleine Byte -Arrays nicht sofort und aktualisiert Cipher damit. Nachdem wir genügend Daten haben, werden sie verschlüsselt und in den zugrunde liegenden Ausgangsstream geschrieben. Es wird also warten, bis Sie 4 4-Byte-Inten hinzufügen und sie dann verschlüsseln. Es ermöglicht es uns, den Verkehr nicht zu verschwenden, aber auch eine Problemursache - wenn der letzte Wert den Block nicht füllt, wird er niemals verschlüsselt und in den zugrunde liegenden Stream geschrieben. Es erwartet, dass ich eine Anzahl von Bytes schreibe, die durch seine Blockgröße (16 Byte) teilbar ist, aber ich kann dies mit TBINYPROTOCOL . Implementieren Sie die Entschlüsselung in ReadMessageBegin () . Ich denke, die Verschlüsselung sollte auf der Transportschicht durchgeführt werden, nicht auf Protokoll. /> tencryptedFramedTransport.java
Ich habe zwei Anwendungen, die mit Sparsamkeit interagieren. Sie [url=viewtopic.php?t=13628]teilen[/url] den gleichen geheimen Schlüssel und ich muss ihre Nachrichten verschlüsseln. Es ist sinnvoll, den symmetrischen Algorithmus (z. B. AES) zu verwenden, aber ich habe keine Bibliothek gefunden, um dies zu tun. Also habe ich eine Nachforschungen angestellt und die folgenden Optionen angezeigt: < /p>
Verwenden Sie die integrierte SSL-Unterstützung < /h2>
Ich kann integrierte SSL-Unterstützung verwenden, eine sichere Verbindung herstellen und meinen geheimen Schlüssel genau wie Authentifizierungs-Token verwenden. Es ist zusätzlich zu dem geheimen Schlüssel, den sie bereits haben, Zertifikate zu installieren, aber ich muss nichts implementieren, außer zu überprüfen, ob der von dem Client empfangene geheime Taste lokal mit der geheimen Taste gespeichert ist. TSOCKET und überschreiben write () und read () Methoden und entschlüsseln Sie Daten. Wird den Verkehr auf kleinen Schreibvorgängen erhöhen. Wenn beispielsweise TBINYPROTOCOL 4-Byte-Ganzzahl schreibt, wird ein Block (16 Bytes) in verschlüsseltem Zustand erfolgt. CipheroutputStream verschlüsselt kleine Byte -Arrays nicht sofort und aktualisiert Cipher damit. Nachdem wir genügend Daten haben, werden sie verschlüsselt und in den zugrunde liegenden Ausgangsstream geschrieben. Es wird also warten, bis Sie 4 4-Byte-Inten hinzufügen und sie dann verschlüsseln. Es ermöglicht es uns, den Verkehr nicht zu verschwenden, aber auch eine Problemursache - wenn der letzte Wert den Block nicht füllt, wird er niemals verschlüsselt und in den zugrunde liegenden Stream geschrieben. Es erwartet, dass ich eine Anzahl von Bytes schreibe, die durch seine Blockgröße (16 Byte) teilbar ist, aber ich kann dies mit TBINYPROTOCOL . Implementieren Sie die Entschlüsselung in ReadMessageBegin () . Ich denke, die Verschlüsselung sollte auf der Transportschicht durchgeführt werden, nicht auf Protokoll. /> [b] tencryptedFramedTransport.java[/b]
import javax.crypto.Cipher; import java.security.Key; /** * TEncryptedFramedTransport is a buffered TTransport. It encrypts fully read message * with the "AES/ECB/PKCS5Padding" symmetric algorithm and send it, preceeding with a 4-byte frame size. */ public class TEncryptedFramedTransport extends TTransport { public static final String ALGORITHM = "AES/ECB/PKCS5Padding";
protected static final int DEFAULT_MAX_LENGTH = 0x7FFFFFFF;
private int maxLength_;
private TTransport transport_ = null;
private final TByteArrayOutputStream writeBuffer_ = new TByteArrayOutputStream(1024); private TMemoryInputTransport readBuffer_ = new TMemoryInputTransport(new byte[0]);
public static class Factory extends TTransportFactory { private int maxLength_; private Key secretKey_;
public Factory(Key secretKey) { this(secretKey, DEFAULT_MAX_LENGTH); }
public Factory(Key secretKey, int maxLength) { maxLength_ = maxLength; secretKey_ = secretKey; }
@Override public TTransport getTransport(TTransport base) { return new TEncryptedFramedTransport(base, secretKey_, maxLength_); } }
/** * Constructor wraps around another tranpsort */ public TEncryptedFramedTransport(TTransport transport, Key secretKey, int maxLength) { transport_ = transport; maxLength_ = maxLength;
decryptingCipher = Cipher.getInstance(ALGORITHM); decryptingCipher.init(Cipher.DECRYPT_MODE, secretKey); } catch (Exception e) { throw new RuntimeException("Unable to initialize ciphers."); } }
public TEncryptedFramedTransport(TTransport transport, Key secretKey) { this(transport, secretKey, DEFAULT_MAX_LENGTH); }
public void open() throws TTransportException { transport_.open(); }
public boolean isOpen() { return transport_.isOpen(); }
public void close() { transport_.close(); }
public int read(byte[] buf, int off, int len) throws TTransportException { if (readBuffer_ != null) { int got = readBuffer_.read(buf, off, len); if (got > 0) { return got; } }
// Read another frame of data readFrame();
return readBuffer_.read(buf, off, len); }
@Override public byte[] getBuffer() { return readBuffer_.getBuffer(); }
@Override public int getBufferPosition() { return readBuffer_.getBufferPosition(); }
@Override public int getBytesRemainingInBuffer() { return readBuffer_.getBytesRemainingInBuffer(); }
@Override public void consumeBuffer(int len) { readBuffer_.consumeBuffer(len); }
public class MultiplicationClient { public static void main(String[] args) { Key key = CryptoTool.decodeKeyBase64("1OUXS3MczVFp3SdfX41U0A==");
try { TSocket baseTransport = new TSocket("localhost", 9090); TTransport transport = new TEncryptedFramedTransport(baseTransport, key); transport.open();
TProtocol protocol = new TBinaryProtocol(transport); MultiplicationService.Client client = new MultiplicationService.Client(protocol);
Ich habe zwei Anwendungen, die mit Sparsamkeit interagieren. Sie teilen den gleichen geheimen Schlüssel und ich muss ihre Nachrichten verschlüsseln. Es ist sinnvoll, den symmetrischen Algorithmus (z....
Guten Tag, ich arbeite derzeit mit einer API in JAVA und Quarkus. Darin erhalte ich über die GET-Methode einen Parameter in der URL, der mit AES verschlüsselt ist. Das Problem ist, dass die...
Ich versuche, ein zufälliges 15 -Zeichen -Kennwort in AES/ECB/PKCS5Padding zu verschlüsseln, aber alle verschlüsselten Zeichenfolgen enden in ==.
Hier sind einige Beispiele:
e17q+38dx9ii5qe6OS1Hrw...
Erklärung.
Ich habe ein Problem mit der AES-256-CTR-Entschlüsselung mithilfe der React-native-aes-crypto-Bibliothek. Die Entschlüsselung funktioniert auf Android einwandfrei, schlägt jedoch auf iOS...
Ich versuche, ein paar LIB für iOS zu erstellen, aber ich erhalte Fehler für die Sparsamkeit LIB Version 0.21.0
Unten ist die Konfiguration, die ich zum Erstellen von
ExternalProject_Add(thrift...