2017-03-20 4 views
-1

unter Listing ist mein CodeScala-I erhielt die gleiche Menge an Chiffre mit differnent Menge an Klar

import java.security._ 
import java.security.spec.X509EncodedKeySpec 
import javax.crypto._ 
import org.apache.commons.codec.binary.Base64 
import scala.io.Source 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import java.util.logging.Logger 

object RSA { 
    def bytes2hex(bytes: Array[Byte]): String = { 
    val hex = new StringBuilder() 
    for (i <- 0 to bytes.length - 1) { 
     val b = bytes(i) 
     var negative = false 
     if (b < 0) { 
     negative = true 
     } 
     val inte = Math.abs(b) 
     val temp = Integer.toHexString(inte & 0xFF) 
     if (temp.length() == 1) { 
     hex.append("0") 
     } 
     // hex.append(temp.toLowerCase()) 
     hex.append(temp) 
    } 
    hex.toString 
    } 



def decodePublicKey(encodedKey: String):Option[PublicKey] = { 
    this.decodePublicKey(
     (new Base64()).decode(encodedKey) 
    ) 
    } 
def decodePublicKey(encodedKey: Array[Byte]): Option[PublicKey]= { 
    scala.util.control.Exception.allCatch.opt { 
     val spec = new X509EncodedKeySpec(encodedKey) 
     val factory = KeyFactory.getInstance("RSA") 
     factory.generatePublic(spec) 
    } 
    } 

def encrypt(file: String,key:PublicKey): Array[Byte] = { 

val cipher = Cipher.getInstance("RSA") 

cipher.init(Cipher.ENCRYPT_MODE, key) 

val text = Source.fromFile(file) 

val list=text.toList 

val blocks=list.grouped(501) 

val iter=blocks.formatted() 


val words=iter.getBytes 

cipher.doFinal(words) 
} 

def main(args:Array[String]):Unit={ 
val publicKey=decodePublicKey("--4096bits RSA public keys--") 

val cipher = encrypt("E:\\plaintext.txt",publicKey.get) 

println("Cipher is "+ bytes2hex(cipher)) 

} 
    }` 

Hier wird der Klartext ("E: \ plaintext.txt") Ich möchte verschlüsseln ungefähr 1 MB Die maximale Länge von RSA-Schlüsseln beträgt 4096 Bit und die maximale Größe, die es verschlüsseln kann, beträgt 501 Byte. Ich entschied mich meinen Text in 2093 Arrays zu teilen (1024 * 1024/501 = 2092.1)

Ich änderte den Klartext (E: \ plaintext.txt) und die Menge des Klartextes änderte sich ebenfalls. Aber ich habe die gleiche Menge an Chiffre mit zwei verschiedenen Mengen an Klartext. Wer kann mir helfen?

+4

** Verwenden Sie RSA niemals als Blockchiffre **. Sie sollten stattdessen AES verwenden. –

+0

* "Ich habe die gleiche Menge an Chiffre, selbst die Menge an normalem Text wird geändert" * - Können Sie einige Beispiele nennen? Bitte [bearbeiten] Sie Ihre Frage, um sie einzuschließen. Ich weiß, was es sein könnte, aber ich möchte sicher sein. –

+0

@ ArtjomB. Klar, ich ändere den Klartext (E: \\ plaintext.txt), der momentan 1 Mb ist. Der nächste Klartext, den ich hier ausgegeben habe, ist 2 Mb. Allerdings haben die zwei verschiedenen Mengen an Klartext die gleiche Menge an Chiffre . –

Antwort

0

Verwenden Sie symmetrische Verschlüsselung wie AES zum Verschlüsseln von Daten.

Wenn Sie ein öffentliches/privates Schlüsselpaar benötigen, verschlüsseln Sie den symmetrischen Schlüssel (AES) mit asymmetrischer Verschlüsselung (RSA). Verpacken Sie dann die AES-verschlüsselten Daten und den RSA-verschlüsselten Schlüssel als eine Einheit. Dies wird allgemein als hybride Verschlüsselung bezeichnet und ist im Wesentlichen wie HTTPs funktioniert.

Verwandte Themen