programing

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

abcjava 2023. 6. 30. 21:47
반응형

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은 끝에서 끝과 여섯 번째 위치에 있습니다.디코더(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]

편집: 제가 썼기 때문에 이 답변이 추가되었는데, 이 답변은 새로운 줄을 추가하지 않습니다.


서류들이 다소 혼란스러워요,b64encode메소드는 매 60번째 문자에 대해 새 줄을 추가해야 하며, 예제는encode64방법은 실제로 사용하고 있습니다.b64encode방법.

보아하니pack("m")에서 사용하는 배열 클래스의 메서드encode64또한 새 줄도 추가합니다.저는 이것이 선택 사항이 아닌 것은 디자인 버그라고 생각합니다.

새 라인을 직접 제거하거나 레일을 사용하는 경우 다음과 같은 Active Support:코어 확장::Base64::를 사용한 인코딩encode64s방법.

ruby-1.9.2에서는 \n(새 줄)을 끝에 추가하지 않는 Base64.strict_encode64가 있습니다.

사용하다strict_encode64방법. encode6460개 기호마다 \n 추가

네, 이건 꽤 정상적인 일입니다.문서는 행 분할을 보여주는 예를 제공합니다. base64는 다른 언어에서도 동일한 작업을 수행합니다(예:Python).

인코딩 단계에서 콘텐츠가 없는 새 줄이 추가되는 이유는 원래 base64가 줄 길이가 제한된 전자 메일로 이진 콘텐츠를 전송하기 위한 인코딩 메커니즘으로 고안되었기 때문입니다.필요하지 않으면 언제든지 교체하십시오.

다음과 같이 옷을 벗거나 무시해야 하는 것 같습니다.

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

\n사용 시 추가됨Base64#encode64맞습니다. 이 게시물을 확인하십시오. https://glaucocustodio.github.io/2014/09/27/a-reminder-about-base64encode64-in-ruby/

언급URL : https://stackoverflow.com/questions/2620975/strange-n-in-base64-encoded-string-in-ruby

반응형