IT박스

Ruby의 base64 인코딩 문자열에서 이상한 \ n

itboxs 2020. 6. 15. 21:58
반응형

Ruby의 base64 인코딩 문자열에서 이상한 \ n


Ruby에 내장 된 Base64 라이브러리에 '\ n'이 추가되었습니다. 이유를 찾을 수 없습니다. 이 특별한 예를 들어 :

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'base64'
=> true
irb(main):003:0> str =  "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
=> "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
irb(main):004:0> Base64.encode64(str)
=> "MTExMC0tYWQ2Y2EwYjA2ZTFmYmViN2U2NTE4YTA0MThhNzNhNmUwNGE2NzA1\nNA==\n"

\ n은 끝에서 마지막 및 6 번째 위치에 있습니다. 디코더 (Base64.decode64)는 이전 문자열을 완벽하게 되돌립니다. 이상한 것은 \ n은 인코딩 된 문자열에 값을 추가하지 않는다는 것입니다. 출력 문자열에서 줄 바꿈을 제거하면 디코더가 완벽하게 다시 디코딩합니다.

irb(main):005:0> Base64.decode64(Base64.encode64(str).gsub("\n", '')) == str
=> true

이 외에도 다른 JS 라이브러리를 사용하여 동일한 입력 문자열의 base64 인코딩 출력을 생성했습니다. 출력에는 \ n이 없습니다.

이것은 버그입니까 아니면 다른 것입니까? 전에이 문제에 직면 한 사람이 있습니까?

참고로,

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

편집 : 내가 쓴 이후이 답변 Base64.strict_encode64()이 추가되었으므로 줄 바꿈이 추가되지 않습니다.


문서 가 다소 혼란스럽고 b64encode메소드는 60 번째 문자마다 줄 바꿈을 추가해야하며 encode64메소드 예제 는 실제로 메소드를 사용합니다 b64encode.

pack("m")사용 된 Array 클래스 메소드 encode64도 줄 바꿈을 추가하는 것 같습니다 . 이것이 선택 사항이 아닌 디자인 버그라고 생각합니다.

줄 바꿈을 직접 제거하거나 레일을 사용 하는 경우 메소드를 사용하여 ActiveSupport :: CoreExtensions :: Base64 :: Encodingencode64s있습니다.


루비 -1.9.2에는 끝에 \ n (줄 바꿈)을 추가하지 않는 Base64.strict_encode64가 있습니다.


예, 이것은 정상입니다. 문서 는 라인 분할을 시연하는 예제를 제공합니다. base64는 다른 언어에서도 마찬가지입니다 (예 : Python).

내용없는 줄 바꿈이 인코딩 단계에서 추가되는 이유는 base64가 원래 이진 내용을 전자 메일로 보내기위한 인코딩 메커니즘으로 고안 되었기 때문입니다.이 경우 줄 길이가 제한됩니다. 필요하지 않은 경우 교체하십시오.


다음과 같이 벗겨 지거나 무시해야합니다.

Base64.encode64(str).gsub(/\n/, '')

\n사용할 때 추가가 Base64#encode64정확한지,이 게시물을 체크 아웃 : https://glaucocustodio.github.io/2014/09/27/a-reminder-about-base64encode64-in-ruby/


strict_encode64방법을 사용하십시오 . encode6460 개의 기호마다 \ n 추가

참고 : https://stackoverflow.com/questions/2620975/strange-n-in-base64-encoded-string-in-ruby

반응형