Maison >développement back-end >Golang >expérience de masquage d'informations Golang
1. Introduction
La sécurité de l'information a toujours été un sujet brûlant en informatique. Récemment, de nombreux chercheurs et développeurs ont commencé à explorer comment utiliser les langages de programmation pour mettre en œuvre la sécurité des informations. Parmi elles, la technologie de dissimulation d’informations joue un rôle crucial à cet égard. Cet article explique comment utiliser Golang pour mettre en œuvre des expériences de masquage d'informations.
2. Introduction aux expériences de masquage d'informations
La technologie de masquage d'informations est une méthode permettant de cacher des données dans un contexte de données non conventionnel ou inhabituel. Cette technique est souvent plus efficace et moins détectable que le chiffrement car elle est cachée parmi d’autres informations. L’une des méthodes de masquage d’informations les plus courantes est la stéganographie LSB (Least Significant Bit). En stéganographie LSB, le bit le moins significatif de chaque pixel peut être utilisé pour stocker un bit binaire d'informations secrètes, cachant ainsi les informations secrètes dans l'image.
Dans l'expérience de masquage d'informations, nous utiliserons le langage de programmation Golang pour créer une application console simple permettant de masquer et d'extraire des informations secrètes. Nous utiliserons une image comme support, intégrerons le message secret dans l'image, puis enverrons l'image avec le message secret au destinataire. Le destinataire peut utiliser la même application console pour extraire les informations secrètes cachées dans l'image.
3. Golang implémente le masquage d'informations
Il est très simple d'implémenter la stéganographie LSB dans Golang. Nous pouvons utiliser le package d’images Go pour manipuler les pixels des images. Puisque nous intégrons uniquement des informations secrètes dans les pixels, nous devons modifier les valeurs des pixels sans changer les informations intégrées. De ce point de vue, nous devons nous assurer que les valeurs des pixels restent inchangées pendant le processus de stéganographie. Par conséquent, nous devons utiliser un algorithme qui modifie uniquement les bits les moins significatifs de la valeur du pixel sans affecter le reste du pixel. Vous trouverez ci-dessous les détails de mise en œuvre.
Nous devons d'abord créer une fonction qui traite les fichiers image et renvoie des objets bitmap. Pour gérer cette tâche, nous utiliserons les packages image/color et image de Go. image/color est une bibliothèque de traitement des couleurs et image est une bibliothèque de traitement des fichiers image. Vous trouverez ci-dessous le code de traitement d'image que nous utiliserons.
func processImage(filename string, imgType string) (image.Image, error) { file, err := os.Open(filename) if err != nil { return nil, errors.New("Failed to open file") } defer file.Close() img, _, err := image.Decode(file) if err != nil { return nil, errors.New("Failed to decode image") } return img, nil }
Cette fonction lit un fichier image du système de fichiers et le décode en bitmap. Si le fichier spécifié n'existe pas ou ne peut pas être décodé, la fonction renvoie une erreur. Une fois que nous pouvons lire avec succès le fichier image et décoder le fichier, nous sommes prêts à procéder aux opérations suivantes.
Le processus de masquage d'un message secret dans une image est basé sur les étapes suivantes. Tout d’abord, nous devons convertir les informations que nous souhaitons masquer au format binaire. Il faut ensuite lire chaque pixel et insérer les informations binaires secrètes dans les bits les moins significatifs. Pour insérer les informations secrètes dans les bits les moins significatifs des pixels, nous utiliserons un code en 3 parties. Ce code convertit la valeur de couleur du pixel au format RGBA. Nous insérerons ensuite les informations secrètes dans les bits les moins significatifs du pixel et reconvertirons le format RGBA de ce pixel en valeur de couleur. Vous trouverez ci-dessous le code pour insérer le message secret.
var rgbaPix color.RGBA rgbaPix = color.RGBAModel.Convert(img.At(x, y)).(color.RGBA) //下面是处理的代码 currentBit := 0 for i := 0; i < len(secretByte); i++ { for j := 0; j < 8; j++ { bit := getBit(secretByte[i], j) //将最低有效位清零 rgbaPix.R &= 0xFE //将当前的比特插入到最低有效位 rgbaPix.R |= uint8(bit) //移动到下一个比特 currentBit++ if currentBit == bitsLen { break Loop } bit = getBit(secretByte[i], j+1) //将最低有效位清零 rgbaPix.G &= 0xFE //将当前的比特插入到最低有效位 rgbaPix.G |= uint8(bit) //移动到下一个比特 currentBit++ if currentBit == bitsLen { break Loop } bit = getBit(secretByte[i], j+2) //将最低有效位清零 rgbaPix.B &= 0xFE //将当前的比特插入到最低有效位 rgbaPix.B |= uint8(bit) //移动到下一个比特 currentBit++ if currentBit == bitsLen { break Loop } } }
Comme mentionné ci-dessus, nous convertissons d'abord la valeur de couleur du pixel au format RGBA. Pour simplifier le code et minimiser l'utilisation de la mémoire, nous supposons que la valeur de couleur de chaque pixel de l'image est une valeur RGBA unique. On insère ensuite chaque bit binaire de l'information secrète dans le bit de poids faible du pixel en fixant la valeur du bit courant au bit de poids faible (0 ou 1). Si nous avons parcouru toutes les informations secrètes après l'insertion, nous pouvons alors quitter la boucle et ignorer les itérations restantes.
Le processus d'extraction des informations secrètes est relativement simple. Tout d'abord, nous devons obtenir la valeur RGBA du pixel et. la taille du bitmap . Ensuite, nous devons lire les informations stéganographiques en fonction de la position de l'élément et de la longueur du décodeur. Vous trouverez ci-dessous le code pour extraire les informations secrètes.
for x := 0; x < bounds.Max.X; x++ { for y := 0; y < bounds.Max.Y; y++ { var rgbaPix color.RGBA rgbaPix = color.RGBAModel.Convert(img.At(x, y)).(color.RGBA) bits := make([]byte, 0) for i := 0; i < 8; i++ { bit := getBitValue(rgbaPix.R, i) //获取像素RGBA中最低有效位中的值 bits = append(bits, bit) if len(bits) == secretByteCount*8 { break } bit = getBitValue(rgbaPix.G, i) //获取像素RGBA中最低有效位中的值 bits = append(bits, bit) if len(bits) == secretByteCount*8 { break } bit = getBitValue(rgbaPix.B, i) //获取像素RGBA中最低有效位中的值 bits = append(bits, bit) if len(bits) == secretByteCount*8 { break } } if len(bits) == secretByteCount*8 { secretByte := make([]byte, secretByteCount) for i := 0; i < secretByteCount; i++ { secretByte[i] = bitsToByte(bits[i*8 : (i+1)*8]) } return secretByte, nil } } } return nil, errors.New("Error while extracting secret, no secret found")
Comme mentionné ci-dessus, avant d'extraire les informations secrètes, nous devons déterminer la longueur des informations secrètes. Pour ce faire, nous devons utiliser le code suivant :
secretByteCount := int(math.Ceil(float64(bitsLen+1) / 8.0))
Nous parcourons ensuite chaque pixel et extrayons les bits les moins significatifs de la valeur RGBA de bas en haut. Pour minimiser l'empreinte mémoire, nous stockons les données en tranches d'octets.
4. Résumé
Cet article présente comment utiliser Golang pour mettre en œuvre des expériences de masquage d'informations. Nous avons d’abord expliqué ce qu’est la technologie de masquage d’informations et présenté la méthode de stéganographie LSB la plus courante. Par la suite, nous avons démontré, à l'aide d'un exemple de code, comment utiliser le langage de programmation Golang pour créer une application console simple pouvant être utilisée pour masquer et extraire des informations secrètes. Grâce à cette expérience, nous pouvons voir que Golang prend en charge le traitement d'images et dispose d'une bonne base de mise en œuvre pour les expériences de masquage d'informations. J'espère que cet article sera utile aux lecteurs et encouragera les chercheurs et les développeurs à continuer d'explorer les applications potentielles des techniques de dissimulation d'informations en informatique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!