[ruby] 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/, '')


답변

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


답변

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


답변