1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import javafx.application.Application import javafx.scene.Scene import javafx.scene.control.Button import javafx.scene.control.TextArea import javafx.scene.layout.VBox import javafx.stage.FileChooser import javafx.stage.Stage import java.io.File import java.io.FileInputStream import java.security.MessageDigest import kotlin.experimental.and class ImageHashApp : Application() { private val textArea = TextArea() private var selectedFiles = mutableListOf<File>() override fun start(primaryStage: Stage) { primaryStage.title = "Comparador de Hash de Imágenes" val selectImageButtons = List(2) { index -> Button("Seleccionar Imagen ${index + 1}").apply { setOnAction { val fileChooser = FileChooser() val selectedFile: File? = fileChooser.showOpenDialog(primaryStage) selectedFile?.let { selectedFiles.add(index, it) val hash = calculateHash(it) textArea.appendText("Hash de la imagen ${index + 1}:\n$hash\n\n") if (selectedFiles.size == 2) { compareImages() } } } } } val vbox = VBox().apply { children.addAll(selectImageButtons[0], selectImageButtons[1], textArea) } val scene = Scene(vbox, 400.0, 300.0) primaryStage.scene = scene primaryStage.show() } private fun calculateHash(file: File): String { val md = MessageDigest.getInstance("SHA-256") val fis = FileInputStream(file) val byteArray = ByteArray(8192) var bytesCount: Int while (fis.read(byteArray).also { bytesCount = it } != -1) { md.update(byteArray, 0, bytesCount) } fis.close() val bytes = md.digest() val sb = StringBuilder() for (i in bytes.indices) { sb.append(((bytes[i] and 0xff.toByte()) + 0x100).toString(16).substring(1)) } return sb.toString() } private fun compareImages() { if (selectedFiles.size == 2) { val hash1 = calculateHash(selectedFiles[0]) val hash2 = calculateHash(selectedFiles[1]) val comparisonResult = if (hash1 == hash2) { "Las imágenes son iguales." } else { "Las imágenes son diferentes." } textArea.appendText("Resultado de la comparación:\n$comparisonResult\n") } } } fun main() { Application.launch(ImageHashApp::class.java) } |
