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?
** Verwenden Sie RSA niemals als Blockchiffre **. Sie sollten stattdessen AES verwenden. –
* "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. –
@ 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 . –