`
momoliu
  • 浏览: 25250 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

判断base64加密后的字符串是否是图片

    博客分类:
  • ruby
 
阅读更多

http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html

http://en.wikipedia.org/wiki/List_of_file_signatures

Image files

File type Typical
extension Hex digits
xx = variable Ascii digits
. = not an ascii char
Bitmap format .bmp 42 4d BM
FITS format .fits 53 49 4d 50 4c 45 SIMPLE
GIF format .gif 47 49 46 38 GIF8
Graphics Kernel System .gks 47 4b 53 4d GKSM
IRIS rgb format .rgb 01 da ..
ITC (CMU WM) format .itc f1 00 40 bb ....
JPEG File Interchange Format .jpg ff d8 ff e0 ....
NIFF (Navy TIFF) .nif 49 49 4e 31 IIN1
PM format .pm 56 49 45 57 VIEW
PNG format .png 89 50 4e 47 .PNG
Postscript format .[e]ps 25 21 %!
Sun Rasterfile .ras 59 a6 6a 95 Y.j.
Targa format .tga xx xx xx ...
TIFF format (Motorola - big endian) .tif 4d 4d 00 2a MM.*
TIFF format (Intel - little endian) .tif 49 49 2a 00 II*.
X11 Bitmap format .xbm xx xx
XCF Gimp file structure .xcf 67 69 6d 70 20 78 63 66 20 76 gimp xcf
Xfig format .fig 23 46 49 47 #FIG
XPM format .xpm 2f 2a 20 58 50 4d 20 2a 2f /* XPM */

Compressed files

File type Typical
extension Hex digits
xx = variable Ascii digits
. = not an ascii char
Bzip .bz 42 5a BZ
Compress .Z 1f 9d ..
gzip format .gz 1f 8b ..
pkzip format .zip 50 4b 03 04 PK..

Archive files

File type Typical
extension Hex digits
xx = variable Ascii digits
. = not an ascii char
TAR (pre-POSIX) .tar xx xx (a filename)
TAR (POSIX) .tar 75 73 74 61 72 ustar (offset by 257 bytes)

Excecutable files

File type Typical
extension Hex digits
xx = variable Ascii digits
. = not an ascii char
MS-DOS, OS/2 or MS Windows 4d 5a MZ
Unix elf 7f 45 4c 46 .ELF

Miscellaneous files

File type Typical
extension Hex digits
xx = variable Ascii digits
. = not an ascii char
pgp public ring 99 00 ..
pgp security ring 95 01 ..
pgp security ring 95 00 ..
pgp encrypted data a6 00 ¦.

 

由于二进制文件有自己的magic number,只需要根据magic number则可以判断是否为image。

def is_a_media_resource body
    data = Base64.decode64 body
    bytes = data.bytes.to_a
    bytes = bytes[0...9]
    hex_bytes = []
    bytes.each{|e| hex_bytes << e.to_s(16)}
    return is_media? hex_bytes
  end

 经过base64解密后,提取前9个字节进行比对,因为magic number最长是9个字节。

 

module ReceiverHelper
  MAGIC_NUMBERS ={
    "PNG"=>["89","50","4e","47"],
    "GIF"=>["47","49","46","38"],
    "FITS"=>["53","49","4d","50","4c", "45"],
    "GKS"=>["47","4b","53","4d"],
    "RGB"=>["01","da"],
    "ITC"=>["f1","00" ,"40","bb"],
    "JPG"=>["ff","d8","ff","e0"],
    "NIF"=>["49","49","4e","31"],
    "PM"=>["56","49","45","57"],
    "EPS"=>["25","21"],
    "RAS"=>["59", "a6", "6a", "95"],
    "TIF_BIGENDIAN"=>["4d", "4d", "00", "2a"],
    "TIF_LITTLEEDIAN"=>["49" ,"49", "2a", "00"],
    "XCF"=>["67", "69", "6d", "70", "20", "78", "63", "66", "20", "76"],
    "FIG"=>["23", "46", "49", "47"],
    "XPM"=>["2f", "2a", "20", "58", "50", "4d", "20", "2a", "2f"]
    }
  def is_media? data 
    MAGIC_NUMBERS.each_pair{|type,numbers|
      if equals(data,numbers)
        return true
      end 
    }
    false
  end
  private 
  def equals data,png_magic_numbers
    data[0...png_magic_numbers.length] == png_magic_numbers
  end
end
 

 

 

 

 

分享到:
评论

相关推荐

    图片与Base64加密码字符串相互转换工具

    在加密过程中,该工具可能采用了某种加密算法对Base64编码后的字符串进行加密,增加了一层额外的安全防护。 【描述解析】 "图片与Base64加密码字符串相互转换工具 带源码" 意味着提供给用户的不仅仅是可执行的应用...

    base64序列化字符串

    - **可打印性**:Base64编码后的字符串只包含ASCII字符,可以在任何支持ASCII的平台上无误地显示和传输。 - **避免转义**:由于不包含控制字符,Base64编码可以避免HTTP、JSON等协议中的转义问题,简化数据处理。 - ...

    BASE64加密解密

    接着,我们通过`Base64.getDecoder().decode()`将编码后的字节数组解码回原始字符串。 【压缩包子文件的文件名称列表】: "java开发中遇到的问题:rt.jar访问限制.doc、BASE64加密解密 方法.txt" 这里的文件名暗示...

    PB关于字符进制数转化及base64加密、解密,nvo_base64.sru

    例如,敏感数据可以先被转换为十六进制字符串,然后用Base64加密,最后存储在数据库的Blob字段中。当需要使用时,再进行解密和反转换。在文件`nvo_base64.sru`中,可能包含了实现这些功能的源代码或组件,供开发者...

    java 图片base64 加密解密

    总结来说,Java中的图片Base64加密解密涉及了二进制数据与ASCII字符串之间的转换,这对于在网络上传输或存储非文本数据(如图像)非常有用。虽然`sun.misc`包中的类已不再推荐,但理解其工作原理有助于更好地理解和...

    Base64文本字符串编码解码加密解密双向解析工具

    在描述中提到,此工具专注于处理文本和字符串的Base64编码和解码,而不是通常针对文件和图片的应用。在处理文本时,首先需要将文本转换为字节序列,通常是根据指定的字符编码进行,比如UTF-8。UTF-8是一种非常常见的...

    将图片转成二进制并生成Base64编码字符串,再将二进制转换成各种图片

    本文将深入探讨如何将图片转换为二进制格式,然后生成Base64编码字符串,以及如何将这些字符串重新转换回图片。这个过程在很多场景下都有应用,比如在网络上传输图片数据,或者在数据库中存储图片。 首先,我们需要...

    sqlserver2005的base64加密解密函数

    Base64编码能够确保数据在传输过程中不被篡改,因为它是通过特定算法将二进制数据转换为一种标准格式的文本字符串。本文将详细讲解如何在SQL Server 2005中实现Base64的加密和解密功能。 一、Base64编码原理 Base64...

    RSA字符串加密解密带Base64二次加密

    使用RSA对字符串进行加密,但是加密以后是一个byte[],然后使用Base64进行了对于byte[]的二次加密,这样就是一个字符串,可以直接进行http的传输而不用头疼了。 注释:关于包名的问题请自己重新新建资源拷贝就可以了

    base64字符串和图片的相互转换

    例如,可以先对图片进行某种加密,然后将加密后的结果转换为Base64字符串,以使数据更安全地在网络上传输。解密时,需要先对Base64字符串解码回原始字节,然后再进行解密操作,还原出原始的图片数据。 4. **使用...

    C# Base64加密解密

    在WinForm应用程序中,你可以创建用户界面,提供输入框让用户输入或粘贴Base64字符串,然后通过按钮触发加密或解密操作。可以利用`BackgroundWorker`组件来异步执行这些计算密集型任务,避免阻塞UI线程。 总的来说...

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    4. **图片解密**:这里的“解密”可能指的是从BASE64字符串恢复到原始图片数据的过程。这个过程称为解码,即将BASE64编码的字符串转换回其原始二进制形式。 5. **数据库操作**:在数据库中插入和检索Blob类型的字段...

    字符串加密与解密(Base64)

    字符串加密与解密(Base64)字符串加密与解密(Base64)字符串加密与解密(Base64)字符串加密与解密(Base64)字符串加密与解密(Base64)字符串加密与解密(Base64)

    VB将二进制图片文件转换为Base64字符串文本

    例如,如果你有一个二进制格式的图片文件,你可能想要将其转换为Base64字符串,以便于在网络应用中直接嵌入图片,或者在数据库中以文本形式存储图片数据。 首先,理解基础概念是至关重要的。Base64是一种编码算法,...

    VB图片加密技术实例:将图片转换了Base64格式字符.rar

    VB图片加密技术实例:将图片转换了Base64格式字符,任意图像转换为Base64文本,支持的图片文件格式|*.gif; *.jpg; *.jpeg; *.jpe; *.bmp; *.png; *.tif; *.tiff。如果有Base64文件查看程序,你可输入这段转换后的...

    PB BASE64加密和解密DEMO

    在“base64串解码为文件demo”这个示例中,可能包含了如何使用封装好的DLL来对一个已编码的BASE64字符串进行解码,并将解码后的数据写入到文件中的步骤。通常,这个过程包括以下步骤: 1. 调用DLL中的解码函数,...

    Base64整合DES加解密支持密钥支持解密失败返回统一字符支持加密后去除特殊字符

    Base64安全性低?...Base64加密后的字符串在URL中不安全,想去掉特殊符号?这里支持。 想在解密失败返回统一字符?这里支持。告诉我还有什么是你想要的。这里都有,如果好用,不介意的请在下面评论一番,谢谢

    微信小程序base64加密,AES加密

    在微信小程序中,当需要在网络上传输非ASCII字符,例如图片或PDF等二进制文件时,通常会先将其转化为Base64字符串。Base64编码将每3个字节的数据转换成4个可打印字符,这样可以保证数据在传输过程中不被破坏。在微信...

    LabVIEW实现Base64加密解密程序源码

    LabVIEW实现Base64加密解密程序源码,可以作为子VI直接调用,非常方便,经过测试没有问题。base64是一种用64个字符来表示任意二进制数据的方法。base 64编码可以将任意一组字节转换为较长的常见文本字符序列,从而...

    BASE64加密源码完整JAR包

    1. `Encoder.encodeToString(byte[])`: 这个方法接受一个字节数组作为输入,返回一个经过BASE64编码的字符串。它将二进制数据转换成可读的ASCII字符串,方便在网络传输或存储。 2. `Decoder.decode(String encoded...

Global site tag (gtag.js) - Google Analytics