2012-09-29 3 views
1

불행하게도, 나는이 작업을 수행하는 코드가 있습니다.System.Text.Encoding.Default과 암호를 암호화

모노에서 우분투 12.04에서 System.Text.Encoding.Default은 System.Text.Encoding.UTF8이고 Windows 7에서는 System.Text.SBCSCodePageEncoding 인 것 같습니다.

암호 암호화/암호 해독 코드는 절대로 System.Text.Encoding.Default을 사용해서는 안되지만 상속 된 코드입니다. System.Text.Encoding을보고 내 문제를 광범위하게 봤더니 표준 인코딩으로이 문자열을 디코딩 할 방법을 결정할 수 없었습니다.이 경우 원본 인코딩이 부족한 Mono/Linux 스택에서이 경우 디코딩 할 수 없습니다.

또한 이상하게 나는이 인코딩으로 저장된 문자열을 해독하려고 할 때, 나는 보통 "나쁜 데이터"를 얻을 System.Text.SBCSCodePageEncoding

과 "잘못된 블록 크기"암호화 예외를 많은 정보를 찾을 수 없어 한

.

모든 정보 또는 제안을 부탁드립니다.

+1

문제는 지금 SBCSCodePageEncoding을 사용하여 인코딩 된 데이터가 있다는 것입니다, 나는 그것을 디코딩하고 때, 나는 명백한 선택이 없습니다. – dwerner

+0

기존 데이터가 데이터베이스에 문자열로 저장되므로 인코딩이 중요한 문제입니다. – dwerner

+0

어쩌면 나는 내 상황이 무엇인지 알 필요가있을만큼 분명하지 않을 수도 있습니다. 나는 아직도 노력에 감사한다. 암호화 후 생성 된 바이트 []은 기본 인코딩 (위의 반환 값)을 사용하여 문자열로 인코딩되고 varchar 필드에 저장됩니다. 그래서 그것이 읽힐 때, 그것은 그 인코딩을 가지고 있습니다. 그리고 나서 다시 byte []로 디코드 될 때 인코딩을 사용합니다. 네, 메소드 나 UTF8Encoding을 사용하여 올바르게 문자열을 저장할 수 있습니다. 그러나 기존의 프로덕션 데이터는 해당 pagecode 쓰레기와 함께 인코딩되어 있습니다. – dwerner

답변

1

byte []를 문자열로 변환하는 데 사용되는 인코딩의 제한된 집합을 알고 있다면 유틸리티를 빌드하거나 사용시 암호가 업그레이드되도록 응용 프로그램에 빌드하십시오.)는 유효한 바이트 []로 암호를 다시 읽고 디코딩 한 다음 바이트 []를 데이터베이스에 Base64로 저장합니다.

암호를 해싱하는 것을 고려해보십시오.이 경우와 거의 대부분 다른 경우에는 문자를 저장/표시해야하는 byte []를 다루는 경우 base64는 항상 좋은 선택.

암호를 해시하기로 결정한 경우 일반 암호 + salt가 아닌 HMAC 스타일 해시 시스템을 사용하거나 .net에 대한 bcrypt 구현을 더 잘 파악하십시오.

http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

0

이 경우 나는 모든 암호 양식 데이터베이스를 해독하고 UTF8 인코딩으로 암호화하고 데이터베이스를 업데이트하는 앱을 만들 것입니다. 그런 다음 원본 코드를 UTF8로 변경하십시오.

+0

임의의 데이터를 UTF-8로 인코딩하면 실패합니다. –

+0

예, 불행히도 실패합니다. – dwerner

관련 문제